2017-02-04 6 views
0

Generated PropertiesのEntity Frameworkコアドキュメントは、DateTime型で作成/更新されたプロパティの最初のコード"timestamp"の生成にデータアノテーションを使用できるようにします。エンティティフレームワークコアデータ注釈データベース生成値

コード最初の移行に伴い、以下のデータのアノテーションを使用しようとしている:

public class Foo { 
    // some properties 

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

    // more properties 
} 

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

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

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

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

ご協力いただきありがとうございます。私はDefault ValuesFluent APIを経由して設定し、データベーストリガーの組み合わせを利用INSERTUPDATEアクションに設定されているDateTimeモデルプロパティに持つことが

+2

データアノテーションを '[DatabaseGenerated(DatabaseGeneratedOption.Computed)]に変更してみてください。 – Thennarasan

答えて

0

。私の質問で私が言及した注釈は、デフォルトで生成された、または更新された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()"); 
} 

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

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 

のTh anks!

関連する問題