내 프로젝트에서는 OrchardProject 웹 사이트에 this tutorial을 사용하여 레코드간에 N 대 N 관계를 구현했습니다. 나는 2 부분 : MaterialPart
& CategoryPart
및 협회 기록이 있습니다.N-to-N 관계를 가진 과수원 CMS ContentQuery
재료 부분
public class MaterialPartRecord : ContentPartRecord {
public MaterialPartRecord() {
Categories = new List<ContentMaterialCategoryRecord>();
}
}
public class MaterialPart : ContentPart<MaterialPartRecord> {
public IEnumerable<CategoryPartRecord> Categories {
get { return Record.Categories.Select(cmcr => cmcr.CategoryPartRecord); }
}
}
CategoryPartRecord
public class CategoryPartRecord : ContentPartRecord {
...
}
public class CategoryPart : ContentPart<CategoryPartRecord> {
...
}
관련 기록 : 이제 내가 필요
public class ContentMaterialCategoryRecord {
public virtual int Id { get; set; }
public virtual MaterialPartRecord MaterialPartRecord { get; set; }
public virtual CategoryPartRecord CategoryPartRecord { get; set; }
}
특정 카테고리에 연결된 MaterialItems
을 선택하십시오. 지금까지 나는 그들을 추출하는이 방법을 가지고있다. 그것은 작동하지만 나는 이것이 올바른 방법임을 확신하지 않습니다.
public IEnumerable<MaterialPart> GetMaterialsByCategory(int catId) {
var cs = new CategoriesService(_oServices);
CategoryPartRecord cat = cs.GetItem(catId).Record;
return _oServices.ContentManager
.Query(VersionOptions.Latest, _contentType)
.Join<CommonPartRecord>()
.OrderByDescending(cpr => cpr.PublishedUtc);
.List()
.Where(ci => ci.IsPublished())
.Select(ci => ci.As<MaterialPart>())
.Where(mp => mp.Categories.Contains(cat)); // < ---- ?
}
그래서 내 질문은 : 우리는 단순히 필요한 CategoryPartRecord_Id
필드 값 inner join
관련된 기록 테이블에 필요로하는 최적의 SQL 쿼리를 생성에 필요한 범주에 대한 materials
을 선택하는 올바른 방법이 무엇인지.
thaks!
분류 체계를 사용하지 않는 이유를 설명 할 수 있습니까? –
@BertrandLeRoy 빵 부스러기에 대해 이전 질문에서 이미 설명했습니다 :) 모든 작업에있어 만병 통치약이므로 분류법에 대해 항상 말합니다. – teran
글쎄요, 제가 모든 질문에 누가 무엇을 말했는지 추적하지 않으면, 특히 그들에게 연결되어 있지 않다면 특히 용서해주십시오. 나는 명확한 유스 케이스가있을 때 항상 택 소노 미를 제기한다. 카테고리를 다시 구현하는 경우 * 정확히 어떤 분류를 위해 설계 되었습니까? 그럼 왜 그걸 사용하지 않니? –