2014-08-28 7 views
0

현재 EF 컨텍스트가 있습니다. 내 데이터베이스 스키마에 다음 시나리오가 있습니다. TableA의 및 TableB의 사이Entity Framework - 외래 키 매핑 - 모델 바인딩

TableA (A_ID, name, description) 
TableB (B_ID, C_ID, name, description) 

관계는 B_ID와 C_ID 모두 FK이기 A_ID한다되도록이다 : 다음

두 개의 테이블 TableA의 및 TableB의

테이블이 정의된다.

내 ModelBinder (Fluent API) 또는 주석을 설정하여 EF에서이 동작을 어떻게 달성 할 수 있습니까? 미리 감사드립니다.

+0

내 PK에는 Int가 아니라 GUID가 사용됩니다. 이것이 여전히 당신이 생각하는 문제일까요? – nav

+0

GUID도 잘 작동해야합니다. – Marthijn

답변

2

나는 해결책이 있지만, TableB 엔티티에 추가 된 TableA virtual prop를 사용하여 Entitites를 조금만 수정해야합니다. 예 :

public class TableB 
{ 
... 
public virtual TableA B { get; set; } 
public virtual TableA C { get; set; } 
... 
} 

은 그런 맥락에서 "OnModelCreating"를 오버라이드 (override)는 (당신은 "HasOptional"대신 "HasRequired"를 사용할 수 있습니다) :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<TableB>() 
       .HasRequired(x => x.B) 
       .WithMany() 
       .HasForeignKey(x => x.B_ID).WillCascadeOnDelete(false); 

      modelBuilder.Entity<TableB>() 
       .HasRequired(x => x.C) 
       .WithMany() 
       .HasForeignKey(x => x.C_ID).WillCascadeOnDelete(false); 

      base.OnModelCreating(modelBuilder); 
     } 

그리고 한 가지 더. 귀하의 "B_ID"기본 키에 대해 내 솔루션을 얼마나 잘 사용하는지 모르겠습니다. 내 프로젝트에는 다른 PK "Id"가 있습니다.

+0

감사합니다. 이 접근법은 나에게 매우 효과적이었다. – nav

관련 문제