【问题标题】:A correct way to create an Id-generation base class for EF entities为 EF 实体创建 Id 生成基类的正确方法
【发布时间】:2012-08-03 08:54:56
【问题描述】:

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

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

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

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

但是现在,我必须通过调用每个子类中的基本构造函数来清除构造函数,对吗?如果是这样,它甚至值得吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2016-07-31
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2019-02-07
        • 1970-01-01
        相关资源
        最近更新 更多