2012-11-06 4 views
3

기본적으로 달성하고자하는 것은 세 개의 테이블이 있는데 하나의 부모가 항상 항목을 갖고 다른 두 테이블 중 하나만 채워집니다. 내가 처리하고 복잡성은 테이블에 대한 기본 키가 두 개의 필드 엔티티 프레임 워크 코드 복합 키의 첫 번째 일대일 관계

ParentTable 
----------- 
UniqueID 
OwnerID 
[Some more fields] 


ChildTable1 
----------- 
UniqueID 
OwnerID 
[Some more fields] 


ChildTable2 
----------- 
UniqueID 
OwnerID 
[Some more fields] 

사람이 가장 EF 코드 먼저 바람직 유창함 사용을 통해이 작업을 수행하는 방법에 대한 어떤 제안이있는 경우 궁금 해서요의 조합이 있다는 것이다 API. 당신은 단지 기본 키가 복합 것을 정의 할 필요가

답변

7

...

modelBuilder.Entity<Parent>().HasKey(p => new { p.UniqueID, p.OwnerID }); 
modelBuilder.Entity<Child1>().HasKey(c => new { c.UniqueID, c.OwnerID }); 
modelBuilder.Entity<Child2>().HasKey(c => new { c.UniqueID, c.OwnerID }); 

... 그리고 정의하는 두 개의 일대일 관계 :

modelBuilder.Entity<Parent>() 
    .HasOptional(p => p.Child1) 
    .WithRequired(); // or .WithRequired(c => c.Parent) 

modelBuilder.Entity<Parent>() 
    .HasOptional(p => p.Child2) 
    .WithRequired(); // or .WithRequired(c => c.Parent) 

당신은 정의 할 수 없습니다 주어진 부모가 두 자식 중 하나만 참조 할 수 있지만 둘 다 참조 할 수는 없도록 제한합니다 (데이터베이스에서 트리거를 정의하는 것을 제외하고). 응용 프로그램의 비즈니스 논리에서이 제한 사항을 처리해야합니다.