代码优先数据注释和继承

时间:2013-02-12 17:25:11

标签: c# entity-framework ef-code-first

我有一个这样的课程:

public class Customer : Entity
{
    [Required]
    public string Forename { get; set; }
    [Required]
    public string Surname { get; set; }

    public virtual ICollection<GazetteerLinks> GazetteerLinks { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
}

它由1和n个子类之间的继承。有没有办法可以在某些子类上禁用Required注释?我不是100%确定来自第三方的所有数据集都能满足要求,但我希望在我自己创建的数据集上强制执行。

1 个答案:

答案 0 :(得分:2)

我对此有一个评论和答案。

评论:在您描述的情况下,Required注释没有任何业务存在。如果您正在访问第三方并且不确定他们是否需要这些属性,那么您需要使它们可以为空。对于您自己的数据集,我强烈建议使用ViewModel对象,然后对该对象进行一些验证,并且只有在通过验证后才创建数据库对象并将其保存到数据库中。这样你就可以获得两全其美:你不必担心第三方不需要它,你自己的工作需要验证。

答案:我和我最近一直在做的项目情况类似。我最终做的是使该类成为一个抽象类,然后覆盖子类中的值。如果您覆盖该属性并具有不同的注释,则EF足够聪明,只能查看用于创建表的覆盖。