为EF实体创建Id生成基类的正确方法

时间:2012-08-02 23:48:43

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

我想为我的实体实现一个基类,所以我不必在每个权限中定义一个Guid Id字段。我创建了以下基类:

public abstract class IdableEntity
    {
        [Key]
        public Guid Id { get; set; }

        protected IdableEntity()
        {
            Id = Guid.NewGuid();
        }
    }

这是因为我知道我可以在这种情况下使用[DatabaseGenerated ...]属性,因为我必须转到数据库并将所有表的ID字段改为(newid())称为“初始化程序”。如果有一个实体类很多,那么这非常不方便 - 因此很多表。

但是现在,我将不得不在每个子类中调用一个构造函数调用基础构造函数,对吧?如果是这样,它甚至值得吗?

2 个答案:

答案 0 :(得分:2)

如果您按照原样使用代码,那么您需要做的就是:

public class ChildEntity : IdableEntity
{
    // ...
}

当您创建ChildEntity类的实例时,将自动调用受保护的基础IdableEntity构造函数,因为它不带任何参数。

答案 1 :(得分:0)

您问题的另一种解决方案是使用代码自动浏览所有表并设置默认约束。其他人已经在这里回答了如何做到这一点:SQL Server - Add default constraints to all tables