繁体   English   中英

使用 EF 代码迁移时,如何更改 model 以设置 SQL 默认日期

[英]How can I alter a model to set the SQL default date when using EF code migrations

首先,在这个 StackOverflow 问题中有很多类似的答案帮助我非常接近,但在我的情况下没有一个完全有效。

我有一个 model class:

public class TestModel
{
    [Key]
    public int TestModelId { get; set; }
    public DateTime CreatedOn { get; set; }
}

并将其添加到DbContext文件中,如下所示:

public virtual DbSet<TestModel> TestModels { get; set; }

因此,在add-migration时,这会产生:

...
migrationBuilder.CreateTable(
    name: "TestModels",
    columns: table => new 
    {
        TestModelId = table.Column<int>(nullable:false)
            .Annotation("SqlServer:Identity", "1, 1"),
        CreatedOn = table.Column<DateTime>(nullable:false)
    },
    ...

现在我正在尝试获得一个一站式的地方,以确保CreatedOn列构建器在其中具有默认的GETDATE()

CreatedOn = table.Column<DateTime>(nullable:false, defaultValueSql: "GETDATE()")

我知道在将其转换为 SQL 服务器端时效果很好,但是我根据链接的问题尝试了几个数据注释和构造函数版本,但无济于事,例如属性

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

什么都不做,我不想每次创建一个 / 它时都必须手动将defaultValueSql部分添加到迁移文件中。

那么我在哪里可以在模型中做到这一点?

您可以在 DbContext class 中完成此操作:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
           modelBuilder.Property(x => x.CreatedOn).HasDefaultValueSql("getdate()");
           .....
        });

编辑:也需要有modelBuilder的实体属性:

modelBuilder.Entity<TestModel>().Property...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM