次のように定義されCreatedDate
た、テーブルに列が必要です。Accounts
CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE()
これは、クラスの CreatedDate プロパティにマップされます。
public class Account
{
public DateTime? CreatedDate { get; private set; }
// ... other properties ...
}
新しいアカウントを作成するときは、CreatedDate を NULL に設定したままにして、データベースに入力させたいと思います。既存のアカウントを DB から読み込むときは、データベースで生成された CreatedDate を EF に取得させたいと思います。
明示的な移行で EF 4.3 コード ファーストを使用しています。EF が Accounts テーブルの移行を生成したときに、次のように変更しました。
CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
残念ながら、EF 4.3 を使用してテーブルをマップしようとすると、EF は CreatedDate 列に値 NULL を挿入しようとします。
Ladislav Mrnka の提案に従って、プロパティに DatabaseGeneratedOption.Identity を設定してみました。ただし、これにより、主キー プロパティから ID オプションが削除されます。代わりに DatabaseGeneratedOption.Computed を使用してみましたが、引き続き NULL を挿入しようとします。すべての移行を元に戻し、再実行しましたが、問題は引き続き発生します。
これが私がやっていることですOnModelCreating
:
modelBuilder.Entity<Account>().Property(a => a.CreatedDate)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
誰か提案はありますか?
助けてくれてありがとう、
リチャード