实体框架代码优先不允许实体直接实现接口

时间:2012-09-19 22:18:14

标签: c# entity-framework-4.1 entity-framework-4.3 entity-framework-5

实体框架可以忽略我在实体中实现接口的事实吗?情况是我有一个实现IModelObject接口的Tag类,它定义了实现它的每个类都需要具有Id属性。课程如下:

public class Tag : IModelObject, IEquatable<Tag>
{
    [ScaffoldColumn(false)]
    public virtual int Id
    {
        get;
        set;
    }

    [Required]
    public virtual string Name
    {
        get;
        set;
    }...

}

我的域模型中的每个实体都实现了IModelObject。没有基类,只有一个接口。默认映射有效,但在数据库中添加了Discriminator列。这个鉴别器不属于我的域模型,所以我不需要它在我的数据库中。
实现接口不是继承,我也在实现IEquatable接口。那么为什么Entity Framework这样的行为是继承并添加了Discriminator列,如何通过不使用基类或抽象类来避免这种情况呢?

1 个答案:

答案 0 :(得分:1)

我对你的推理感到有些困惑。继承与你的问题无关。您的问题是您的实体包含属性(以及虚拟属性.EF对虚拟属性执行特殊操作)。 EF将为您实体的每个公共财产创建一个列。我不确定为什么你认为它不应该,因为它就是它的作用。

如果您希望EF忽略某个属性,那么您可以使用该属性上的[NotMapped]属性,EF将忽略该属性。