2013-09-06 6 views
0

C#에서 EF 6.0을 사용하여 다음을 구현할 수 있는지 궁금합니다. Entity Framework, 목록 목록 가능?

그래서 나는 키와 타입 B의 엔티티와 값으로 C 개체의 목록이있는 딕셔너리있는 엔티티 A가 :

public class A 
{ 
    public int AID { get; set; } 
    public Dictionary<B, List<C>> myList { get; set; } 

    public somePrimitive AdditionalPropertyOfA { get; set; } 
    public somePrimitive AnotherPropertyOfA { get; set; } 
} 

내가 데이터베이스 테이블 A에이 변환하고자을하는 다음 예와 같습니다.

Table A 
AID BID CID AdditionalPropertyOfA ... 
1 1 1 ... 
1 1 2 ... 
1 2 3 ... 
1 2 4 ... 
2 1 1 ... 
2 2 2 ... 
2 2 3 ... 
2 2 4 ... 

그래서 나는 그것이 무슨 뜻인지 알기를 바랍니다. 위의 예제에서 두 개의 A 엔티티, 두 개의 B 엔티티 및 네 개의 C 엔티티가 있습니다. B = 1 : 1 -> 2, B = 2 : A = 1 용

우리가 3-> 4

A = 2을 위해 우리 가지고 B = 1 : 1, B = 2 : 2-> 3-> 4

문제점은 엔티티 클래스 A 나 유창한 Api에서 이것을 작성하는 방법을 모른다는 것입니다. 클래스 A는 엔티티 B에 대한 n : m 매핑을 가질 필요가 있으며 또한 C에 대한 n : m 매핑이 필요합니다. 그러나 이러한 것들을 함께 가져 오는 방법은 무엇입니까?

편집 : 내가 무엇을 의미하는지 명확히하려면 : A를 작업 계획으로, B를 직원으로, C를 직원을위한 작업으로 생각하십시오. B는 자체적으로 엔티티 (이름, 주소 등)이지만 A의 컨텍스트 내에서 작업을 할당했습니다.

+1

(예를 들면). 이것은 끔찍한 데이터베이스 설계입니다. 대부분의 프로그래머/DBA는 더 높은 표준 형식을 지향합니다. 이것은 1NF조차하지 않습니다! – Aron

+0

테이블에 클래스 파일의 사용자 지정 매핑을 사용할 수 있습니다. 유창한 API를 사용할 수 있습니다. –

+0

그럼 더 좋은 아이디어는 무엇일까요? 엔티티 A에 일반 데이터베이스를 사용하지 말고 XML 파일 만 사용하십시오. 또는 그것을 정규화하고 내 코드에서 A 클래스에 더 많은 문제가 있습니까? 그런데이 경우 1NF는 무엇이 될까요? Fluent API로 맞춤 매핑을 어떻게 실현할 수 있습니까? – user2653422

답변

0

이 디자인은 아래 예제와 비슷하게 보일 것입니다. 당신은 사전을 만들 이유가 없으므로 내가 왜 당신이 그것을 사용하기를 원할 지 모른다.

public class A 
{ 
    public int AID { get; set; } 

    public somePrimitive AdditionalPropertyOfA { get; set; } 
    public somePrimitive AnotherPropertyOfA { get; set; } 

    public virtual ICollection<B> MyBs { get; set; } 
} 

public class B 
{ 
    public int BID { get; set; } 
    public int AID { get; set; }  

    public virtual ICollection<C> MyCs { get; set; } 
} 

public class C 
{ 
    public int CID { get; set; } 
    public int BID { get; set; }  
} 

테이블 : 가능하더라도

Table A 
AID AdditionalPropertyOfA ... 
1 ... 
2 ... 

Table AB (or AtoB) 
AID BID 
1 1 
1 2 
2 1 
2 2 

Table B 
BID 
1  
2  

Table BC (or BtoC) 
BID CID 
1 1 
1 2 
2 2 
2 3 
2 4 

Table C 
CID 
1 
2 
3 
4 
+0

아이디어를 제공해 주셔서 감사합니다. 하지만 이제는 B 객체를 요청하면이 B 객체에 MyC 컬렉션이 있다는 문제가 있습니다. 하지만 A의 추가 정보 만 있으면 B가 C와 연결되어야합니다. A의 작업 계획, B의 직원 및 C의 직원 작업을 생각하십시오. B는 자체적으로 엔티티 (이름, 주소 등)이지만 A의 컨텍스트 내에서 작업을 할당했습니다. – user2653422

관련 문제