簡體   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