Entity Framework Core(7)を使用して挿入時にsqlのデフォルト値を上書きする

entity-framework entity-framework-core

質問

私は、SQL Serverのデフォルト値を設定する[CreatedAtIsoUtc]という列のテーブルを持っています

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()操作を実行するときにこの値を上書きすることはできません。

どのように私はこれを働かせることができるかに関する任意のアイデア?

受け入れられた回答

実際にEFコアv1.1.0デベロッパーにあなたが行うことができます(つまり、タイプのデフォルトとは異なる任意の値にプロパティを設定することにより、 0の数字のために、 falseのためのboolnullのためのstringとNULL値可能なタイプ、 default(DateTime)あなたのケースでは) 。現在の唯一の制限は、SQLのデフォルト値を0falsenullなどでオーバーライドできないことです。

例えば

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

CreatedAtIsoUtcが既定のGETUTCDATE()に等しいレコードを挿入し、

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

指定した値のレコードを挿入します。


人気のある回答

あなたの文脈の中にあなたのエンティティに生のSQLのデフォルト値を設定することができますOnModelCreating()使用HasDefaultValueSql()

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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ