Entity Frameworkコアデータ注釈データベース生成値

c# data-annotations entity-framework-core sql-server

質問

生成されたプロパティのEntity Frameworkコアドキュメントは、 DateTime型として作成/更新されるような、生成されたコードの最初の"タイムスタンプ"プロパティにData Annotationsを使用できるように見えます

コードの最初の移行と一緒に次のデータ注釈を使用しようとすると、

public class Foo {
    // some properties

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Created { get; set; }

    // more properties
}

コマンドラインでコマンドラインを実行しようとすると、次のエラーが表示されます。コマンドラインでdotnet ef migrations add AddFooTimestampdotnet ef migrations add AddFooTimestamp

プロパティータイプが 'DateTime'であるため、エンティティタイプ 'Foo'の 'Created'プロパティにID値の生成を使用できません。 ID値の生成は、符号付き整数プロパティでのみ使用できます。

モデル内のドキュメントに記載されているデータ注釈を効果的に活用するには、EFコア環境とSQL Server環境でコードを最初にマイグレーションする方法がありますか?または、現時点で利用可能な[Timestamp]注釈だけですか?

私のプロジェクトは、ツールMicrosoft.EntityFrameworkCore.Toolsバージョン「1.0.0-preview2-final」とMicrosoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServerバージョン「1.1.0」を使用しています。

ご提供いただけるお手伝いをありがとうございます。

受け入れられた回答

INSERTUPDATEアクションで設定されたDateTimeモデルのプロパティを持つためには、 Fluent API設定とデータベーストリガーを使用してデフォルト値の組み合わせを使用しました。私の質問で私が言及した注釈は、デフォルトまたは更新されたDateTime値を生成するようにSQL Serverを自動的に構成しません。

モデル:

public class Foo {
    // some properties

    public DateTime Created { get; set; }

    public DateTime LastUpdated { get; set; }

    // more properties
}

デフォルト値:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    modelBuilder.Entity<Foo>()
        .Property(i => i.Created)
        .HasDefaultValueSql("getdate()");

    modelBuilder.Entity<Foo>()
        .Property(i => i.LastUpdated)
        .HasDefaultValueSql("getdate()");
}

データベースAFTER UPDATEトリガー:

CREATE TRIGGER [dbo].[Foo_UPDATE] ON [dbo].[Foo]
    AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    IF ((SELECT TRIGGER_NESTLEVEL()) > 1) RETURN;

    DECLARE @Id INT

    SELECT @Id = INSERTED.Id
    FROM INSERTED

    UPDATE dbo.Foo
    SET LastUpdated = GETDATE()
    WHERE Id = @Id
END

ありがとう!



Related

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