51
我正在使用EF CF方法为MySQL网站。 由于某种原因,EF在我的Post表中创建一个名为“Discriminator”的列,并且包含VARCHAR“Post”。实体框架代码首先创建“鉴别器”列
为什么创建此列?我可以做些什么来避免它被创建?有这个专栏有什么好处吗?
我正在使用EF CF方法为MySQL网站。 由于某种原因,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
{
//...
}
...并通过添加一个DbSet<BaseEntity>
你推导的情境使模型的BaseEntity
一部分,例如,实体框架将映射这个类层次结构默认为单个表格,但引入了一个特殊列 - Discriminator
- 以区分存储在此表中的不同类型(Post
或OtherEntity
)。此列将填入该类型的名称(再次为Post
或OtherEntity
)。
感谢您的好解答。但是,我的模型不是派生的。为什么EF仍然制造鉴别器? – kasperhj
@lejon:你可以在你的问题中展示模型吗?除了继承的情况之外,我从来没有见过“Discriminator”列。我上面的代码只是一个例子。例如,如果'Post'本身不是派生出来的,但是如果有其他从'Post'派生出来的实体,你会得到同样的结果。 – Slauma
我明白了!另一个来自Post的模型。谢谢回答! – kasperhj