2012-07-18 5 views
0

TPC 상속을 사용하여 복잡한 개체 모델을 기존 데이터베이스에 매핑합니다. 내 상속 구조의 중간 수준에서 관계를 만들 때 문제가 발생합니다.Entity Framework 코드 우선 : MultiLevel TPC 상속 관계가 중급 수준

public class ParentClass 
{ 
} 

public class MiddleClass : ParentClass 
{ 
    public Int64 RelationshipId; 
    public Relationship Relationship; 
} 

public class ChildClass1 : MiddleClass 
{ 
} 

public class ChildClass2: MiddleClass 
{ 
} 

public class Relationship 
{ 
    public string RelationshipInfo { get; set; } 
} 

public class MyEntities : DbContext 
{ 
    public DbSet<ParentClass> Parents 
    public override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<ChildClass1>.Map(m => m.MapInheritedProperties); 
     modelBuilder.Entity<ChildClass2>.Map(m => m.MapInheritedProperties); 

     modelBuilder.Entity<MiddleClass>.HasRequired(mc => mc.Relationship).WithMany().HasForeignKey(mc => mc.RelationshipId); 
    } 
} 

내 모델은 modelBuilder.Entity<MiddleClass>.HasRequired(mc => mc.Relationship).WithMany().HasForeignKey(mc => mc.RelationshipId); 행을 추가 할 때까지 작동합니다. 이 관계를 모든 어린이들과 연결시켜야합니까?

내가받는 오류는 입니다. 유형 "중간 클래스"는 엔티티 분할 또는 다른 상속 형식을 사용하는 유형에서 상속 된 속성을 매핑하므로 정의 된대로 매핑 할 수 없습니다. '

답변

0

답변 (일종의) here을 발견했습니다. 기본 대답은 상속 된 클래스가 데이터베이스의 테이블로 표시되지 않으므로 해당 테이블에서 관계를 만들 수 없다는 것입니다.

는 그럼에도 불구하고 작동하지 않습니다 같은 상위 클래스를 통해 상속 재산을지도하려고 :

modelBuilder.Entity<ChildClass>() 
      .HasRequired(cc => cc.Relationship).WithMany().HasForeignKey(cc => cc.RelationshipId); 

그것은 관계 객체가 여전히 중산층 "테이블"의 일부이며이 매핑을 시도하는 이해합니다. 유일한 작업은 하위 클래스에 모든 관계 개체를 갖는 것입니다.

public class ParentClass 
{ 
} 

public class MiddleClass : ParentClass 
{ 
    public Int64 RelationshipId; 
    public Relationship Relationship; 
} 

public class ChildClass1 : MiddleClass 
{ 
    public Int64 RelationshipId; 
    public Relationship Relationship; 
} 

public class ChildClass2: MiddleClass 
{ 
    public Int64 RelationshipId; 
    public Relationship Relationship; 
} 

public class Relationship 
{ 
    public string RelationshipInfo { get; set; } 
} 

이것은 최선의 해결책은 아니지만 아마도 EntityConfigurations의 상속 된 구조를 통해 매핑을 수행 할 수 있습니다.

관련 문제