实体框架 - 无数据库字段的TPH继承
问题描述:
我有2个继承自相同基类的子类。他们都映射回同一张桌子。如果db表中的field1为空,且field2不为空,则它是一个子类。如果field1不为null,并且字段2为空,则它是另一个子类。实体框架 - 无数据库字段的TPH继承
我不断收到错误。实际的消息是:“无效的列名'Discriminator'。”它实际上是说Discriminator ...我没有把它作为一个通用术语。
这里是我的代码示例:
DatabaseTableA
TableAId (PK , int)
FooId (FK , int , null)
BarId (FK , int , null)
Prop1 (int)
Prop2 (int)
Prop3 (int)
public abstract class BaseClass
{
public int Prop1{ get; set; }
public int Prop2{ get; set; }
public int Prop3{ get; set; }
}
public class Foo : BaseClass
{
public int FooId{get;set;}
}
public class Bar : BaseClass
{
public int BarId{get;set;}
}
internal class BaseClassMap : EntityTypeConfiguration<BaseClass>
{
public BaseClassMap()
{
ToTable("DatabaseTableA");
HasKey(e => e.TableAId);
Map<Foo>(m => m.Requires("BarId").IsDBNull());
Map<Bar>(m => m.Requires("FooId").IsDBNull());
}
}
如何映射这是否正确?
答
实体框架将假定任何从映射到数据库表上的POCO类继承的类都需要Discriminator列,即使派生类不会保存到数据库中。
见这里的解决方案EF Code First "Invalid column name 'Discriminator'" but no inheritance
我之前读了解决方案。我不明白这是如何解决我的问题的,所有列都在子类中说明。 – Chris 2014-11-23 22:18:16