2012-08-26 2 views
1

나는 세 테이블 : Items, Category 및 접합 테이블 CategoryItems을 가지고 있습니다. 아이템과 카테고리는 다 대다 관계를 가지고 있습니다.엔티티 프레임 워크에서 many to many 정렬하기

카테고리 항목에는 Category_Id, Item_IdPosition의 세 열이 있습니다.

Position을 사용하여 Entity Framework에서 항목을 정렬하는 방법은 무엇입니까?

나는이 모델 빌더를 사용하고 있습니다 :

modelBuilder 
.Entity<Category>() 
.HasMany(c => c.Items) 
.WithMany(); 

답변

0

나는 카테고리 항목의 로딩이를 사용하여 종료 : 다음

public IEnumerable<Item> Items 
    { 
     get 
     { 
      using (var context = new CatalogueContext()) 
      { 
       var ids = context.Database.SqlQuery<int>("SELECT Item_Id FROM CategoryItems WHERE Category_Id = " + 
                 this.Id + " ORDER BY Position"); 
       foreach (int id in ids) 
        yield return context.Items.Find(id); 

      } 
     } 
    } 

와 위치를 변경하는 SQL 쿼리를 사용하여.

3

EF 매핑을 지원하지 않습니다 대다 관계하여 접합 테이블 (CategoryItems가) 관계의 각 끝 부분에 대한 외부 키를 통해 추가 열이있는 경우 (이 경우, Position). 다른 유형 (예 : CategoryItem)을 만들고이 유형에 매핑을 두 개의 일대 다 관계로 구성해야합니다.

이 경우, 모두 당신의 CategoryItem 유형 (예를 들어) CategoryItem 컬렉션을 가질 것이며, CategoryItem 유형은 CategoryItem 속성이 있습니다.

var category = context.Categories.Find(categoryId); 
var orderedItems = 
    category.CategoryItems.OrderBy(ci => ci.Position).Select(ci => ci.Item); 
당신은 아마 이것이 있지만로서, CategoryItem보다 더 좋은 이름을 선택하는 것이 좋습니다

:

따라서, 위치에 의해 주문 범주에 대한 항목의 목록을 얻으려면, 당신은 뭔가를 할 것입니다 좋은 점은 접합부 테이블을 순수하게 다 대다 관계를 모델링하는 것으로 묘사하는 좋은 이름입니다. 실제로는 실제로는 그 자체로 엔티티입니다.

+0

답변 해 주셔서 감사합니다. – ErikTJ