2011-09-12 106 views
51

我正在使用EF CF方法为MySQL网站。 由于某种原因,EF在我的Post表中创建一个名为“Discriminator”的列,并且包含VARCHAR“Post”。实体框架代码首先创建“鉴别器”列

为什么创建此列?我可以做些什么来避免它被创建?有这个专栏有什么好处吗?

回答

86

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 - 以区分存储在此表中的不同类型(PostOtherEntity)。此列将填入该类型的名称(再次为PostOtherEntity)。

+0

感谢您的好解答。但是,我的模型不是派生的。为什么EF仍然制造鉴别器? – kasperhj

+0

@lejon:你可以在你的问题中展示模型吗?除了继承的情况之外,我从来没有见过“Discriminator”列。我上面的代码只是一个例子。例如,如果'Post'本身不是派生出来的,但是如果有其他从'Post'派生出来的实体,你会得到同样的结果。 – Slauma

+0

我明白了!另一个来自Post的模型。谢谢回答! – kasperhj