2012-01-18 2 views
2

안녕하세요, 저는 불가능한 일을 분명히하려고합니다.Many to Many (자체 관련) 특정 주문 엔티티 프레임 워크

C# 엔터티 프레임 워크 (4.2) 데이터베이스에서 먼저 특정 순서가있는 자체와의 많은 관계가있는 자체 참조 테이블이 필요합니다.

친구가있는 친구가 자신의 우정을 주문한 것처럼 생각하십시오> 최우수 친구 - 최악의 친구.

"FriendToFriend"관계 엔티티를 사용하지 않으면이 작업을 수행 할 수 있습니까? Friend.Friends (주문 열 제거)를 사용하여 친구를 사용할 수 있기를 원하지만 친구 관계를 기반으로 기본 주문을해야합니다. 주문. 내 작업은 생성 된 클래스를 확장하여 Friends에 대한 새 속성을 순서대로 갖도록하려는 것과 같습니다.

다른 사람이 더 좋은 아이디어가 있습니까?

답변

2

Entity Framework는 정렬 된 컬렉션을 지원하지 않습니다. 이것은 EF가 미숙함을 보여주는 많은 상황 중 하나입니다.

실행 가능한 옵션 인 경우 nHibernate를 시도하십시오. 그것 supports ordered collections.

EF를 사용하면 중간 표를 추가 열로 매핑하고 논리에 따라 순서를 수동으로 조정해야합니다.

+0

감사합니다 응답을. 나는 기본적으로 내 질문에 설명 된 방식으로 해결해야했습니다. 나는 더 많은 사람들이 대답하기를 희망했지만, 답을 찾지 못했다. SSDL을 크게 수정하는 것 이외에 며칠 동안 내 머리를 감싸는 느낌이 들지 않는다. – psy

1

데이터 모델로 디자인 할 때 관계 테이블을 추가하는 것이 좋으며 관계 테이블에는 순서를 정의하는 속성이 있어야합니다 (예 : 최악의 친구는 0, 최고 100).

그런 다음 EF에서 검색중인 목록이 해당 순서 여야한다면 해당 속성으로 명시 적으로 정렬합니다.

즉, 데이터를 쿼리하는 데 사용하는 모든 방법을 통해 해당 관계를 일관되게 사용할 수 있습니다. EF를 사용한다면 EF를 사용할 수 있습니다. (예, Friend.Friends만큼 편리하지는 않지만 코드는 의도에 대해 명확 해집니다.) Friend.FriendRelationships.Select (p => p.Friend) .OrderBy (p => p.OrderValue)), 직접 SQL을 사용하는 경우에도 사용할 수 있습니다.

코드에서 Friend.Friends를 발견하면 어떤 순서로 적용 할 것인지 잘 모릅니다. 당신이 비록 있어야하는 경우

, 당신은 항상 비 DB 속성으로 추가 할 수 있습니다 -

public class Friend 
{ 
    public virtual List<FriendRelationship> UnorderedFriendList { get; set; } 

    [NotMapped] 
    public IEnumerable<Friend> Friends 
    { 
    get 
    { 
     return UnorderedFriendList.Select(p => p.Friend).OrderByDescending(p => p.OrderValue); 
    } 
    } 
} 
관련 문제