使用Entity Framework Core覆蓋插入時的sql默認值(7)

entity-framework entity-framework-core

我有一個表[CreatedAtIsoUtc]列,用於設置Sql Server的默認值

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

        });

在原始sql server查詢中,我可以插入一條記錄並覆蓋[CreatedAtIsoUtc]默認值。

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

關於如何讓這個工作的任何想法?

一般承認的答案

實際上,在EF核心V1.1.0你可以做,通過屬性設置為比默認的類型(即不同的任何值0的號碼, falseboolnullstring和可空類型, default(DateTime)你的情況) 。唯一的當前限制是你不能用0falsenull等覆蓋sql默認值。

例如

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

將插入一個CreatedAtIsoUtc等於默認GETUTCDATE() ,而

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

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


熱門答案

您可以使用HasDefaultValueSql()在上下文的OnModelCreating()您的實體設置原始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()");
    }
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow