在实体框架的Code-First方法中为模型的构造函数赋值是否正确?

时间:2016-01-12 12:33:31

标签: c# entity-framework constructor ef-code-first default-value

我需要在我的模型中有一个属性来存储它的创建日期。它看起来像这样:

public class User
{
    public User()
    {
        this.DateCreated = DateTime.Now;
    }

    public int Id { get; set; }

    public string Name { get; set; }

    public DateTime DateCreated { get; set; }
}

我的问题特别是关于在模型的构造函数中分配DateCreated属性:

public User()
{
    this.DateCreated = DateTime.Now;
}

它运作正常,但我只是想知道这种方法是否正确,因为我无法找到任何相关内容。

2 个答案:

答案 0 :(得分:0)

可以使用构造函数为实体设置默认值。只需要注意设置实体引用(例如this.Group = new Group();),这应该是never do

设置DateCreated是一种特殊情况。您可能希望在实际保存对象时执行此操作,例如覆盖DbContext.SaveChanges()。我个人的偏好甚至是通过数据库默认值/触发器来做到这一点,因此您可以独立于本地时钟和UTC日期/时间设置。

答案 1 :(得分:0)

这是完全正确的。另一种选择是将默认值添加到迁移中

AddColumn("dbo.MyTable", "MyDateTime", c => c.DateTime(nullable: false, defaultValueSql: "GETDATE()"));