2017-01-16 259 views
0

我有一個柱[CreatedAtIsoUtc]的表中設置一個SQL Server的默認值覆蓋SQL默認值(7)

migrationBuilder.CreateTable(
      name: "CurrentAccountLedger", 
      columns: table => new 
      { 
       Id = table.Column<Guid>(nullable: false, defaultValueSql: "newsequentialid()"), 
       CreatedAtIsoUtc = table.Column<DateTime>(nullable: false, defaultValueSql: "GETUTCDATE()"),      
      } 

     }); 

在原始的SQL服務器查詢,我可以插入記錄並覆蓋[CreatedAtIsoUtc]默認值。

在Entity Framework中,執行Add()操作時似乎無法覆蓋此值。

關於如何讓這項工作有任何想法?

回答

3

其實在EF核心V1.1.0你可以做,通過屬性設置爲任意值不同比(即0代表數字,false代表bool,null代表string和可空類型,default(DateTime)代表您的情況)。目前唯一的限制是不能覆蓋使用0的SQL默認值,falsenull

例如

db.CurrentAccountLedger.Add(new CurrentAccountLedger { }); 

會插入與CreatedAtIsoUtc記錄等於默認GETUTCDATE(),而

db.CurrentAccountLedger.Add(new CurrentAccountLedger { CreatedAtIsoUtc = new DateTime(2017, 1, 1) }); 

將插入具有指定值的記錄。

+0

謝謝。我最初試過這個,但由於某種原因它不工作。剛剛重新運行,它的工作原理。不知道我在哪裏搞砸了。 –

+0

這是否意味着使用EfCore null值不能插入到具有默認值的可空列中: http://stackoverflow.com/questions/41969303/ef-core-insert-null-value-to-nullable-column- that-has-default-value – borisdj

+0

@Boris的確(字符串和**爲可空類型**爲null) –

1

您可以在上下文的OnModelCreating()使用HasDefaultValueSql()在設置你的實體原始的SQL默認:

class YourContext : DbContext 
{ 
    public DbSet<CurrentAccountLedger> CurrentAccountLedgers { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<CurrentAccountLedger>() 
      .Property(x => x.CreatedAtIsoUtc) 
      .HasDefaultValueSql("GETUTCDATE()"); 
    } 
}