我试图控制Entity Framework 6如何将我的类层次结构映射到表中,以便层次结构中间的抽象类中的属性映射到后代类型,而不是映射到其基类。
我的类层次结构非常简单:
public abstract class BaseType
{
public int Id { get; set; }
public DateTime DateField { get; set; }
}
public abstract class DerivedAbstract : BaseType
{
public string MapToChild { get; set; }
}
public class Concrete1 : DerivedAbstract
{
public int Age { get; set; }
}
public class Concrete2 : DerivedAbstract
{
public string Name { get; set; }
}
我已经设置了一个简单的每个表类型的层次结构:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<BaseType>();
modelBuilder.Entity<Concrete1>().ToTable("Concrete1");
modelBuilder.Entity<Concrete2>().ToTable("Concrete2");
}
这给了我三个表:BaseTypes
,Concrete1
和Concrete2
。到目前为止,我感到非常高兴,但我的挑战是,MapToChild
类中定义的字段DerivedAbstract
被映射到BaseTypes
表而不是Concrete1
两个和Concrete2
表。
这在大多数情况下都有意义,但在我正在进行的项目中却没有。所以我正在寻找一种方法来告诉Entity Framework我希望将属性映射到两个表Concrete1
和Concrete2
。
到目前为止,我一直无法找到办法。 Entity Framework是否支持它?
答案 0 :(得分:0)
这种情况正在发生,因为您告诉它映射BaseType。因此,它创建基本类型作为TPH映射并添加鉴别器。
如果删除BaseType映射,您将获得concrete1的表和concrete2的表格,我认为这是您想要的。正确?
啊,对不起,可能是你想要的。我无法映射您的类,因此BaseType是一个表,并且MapToChild在每个具体类型中。我假设您正在这样做,因此您可以查询BaseType并获取多个子类型。所以,别介意。