我在使用MySQL的网站上使用EF CF方法。出于某种原因,EF在我的Post表中创建一个名为“Discriminator”的列,并包含VARCHAR“Post”。
为什么要创建此列?我可以做些什么来避免它被创建吗?有这个专栏有什么好处吗?
Discriminator
列在Table-Per-Hierarchy继承方案中使用和需要。例如,如果您有这样的模型......
public abstract class BaseEntity
{
public int Id { get; set; }
//...
}
public class Post : BaseEntity
{
//...
}
public class OtherEntity : BaseEntity
{
//...
}
...并使BaseEntity
成为模型的一部分,例如通过向派生上下文添加DbSet<BaseEntity>
,Entity Framework将默认将此类层次结构映射到单个表中,但引入一个特殊列 - Discriminator
- to区分存储在此表中的不同类型( Post
或OtherEntity
)。此列将填充类型的名称(再次Post
或OtherEntity
)。
您可以通过将[NotMapped]
数据注释添加到从基类继承的模型来停止正在创建的列。这将告诉EF不要将您的类添加到将来的迁移中,删除了鉴别器列。
public class BaseClass
{
}
[NotMapped]
public class InheritingClass : BaseClass
{
}