2014-02-27 9 views
0

EF6 사용 A(1)---(0..1)C(0..1)---(1)B ((x)은 카디널리티)을 정의하려고합니다. 표 C는 A와 B의 2 개의 외래 키의 복합 키를 사용합니다.테이블에 복합 키를 one-to-zero-or-one 관계로 설정하십시오.

// Other properties are omitted for brevity 
public class A 
{ 
    public int Id { get; set; } 
    public virtual C C { get; set; } 
} 

public class B 
{ 
    public int Id { get; set; } 
    public virtual C C { get; set; } 
} 

public class C 
{ 
    public virtual A A { get; set; } 
    public virtual B B { get; set; } 
} 

이것은 유창한 API입니다.

public class C : EntityTypeConfiguration<C> 
{ 
    public C() 
    { 
     // Primary Key 
     this.HasKey(t => new { t.A, t.B}); // This is the problem 

     // Relationships 
     this.HasRequired(t => t.A) 
      .WithOptional(t => t.C); 
      // cannot use .HasForeignKey 

     this.HasRequired(t => t.B) 
      .WithOptional(t => t.C); 
      // cannot use .HasForeignKey 
    } 
} 

HasKey(t => new { t.A, t.B}) 허용하고 보통 .HasForeignKey 설정 스칼라 속성을하지 않습니다. 그러나 그것은 일대일이기 때문에 사용할 수 없습니다.

어떻게해야합니까?

답변

0

A-> C.WithOptional이 지정되면 EF는 테이블 A와 C가 동일한 PK를 갖는다 고 가정합니다.

A-> C 및 B-> C 링크 모두에서 0..1을 유의하면서/.WithMany().HasForeignKey(..)을 지정하는 것이 좋습니다.

+0

나는 EF6에 의해 무언가를 지원하려고 노력하고있는 것 같습니다. 나는 비슷한 것을 생각하고 있었다. –