この問題に対する正解は、列がComputedであることをEntity Frameworkに伝えることです。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual DateTime CreatedDate { get; set; }
DatabaseGeneratedOption.Computed
それがデータベースで設定され、Entity Frameworkので変更することはできないことを意味します。 DatabaseGeneratedOption.Identity
は、カラムがIDENTITYカラムであることを意味します。これは、数値の主キーを自動インクリメントするためにのみ使用してください。
** DatabaseGeneratedOption enumerationのドキュメントには、IDENTITY列については何も言及されていません(これはSqlServer固有の実装の詳細な部分もあります)。代わりに、「行が挿入されたときにデータベースが値を生成する」という識別オプションを定義します。レコードを作成するときにDEFAULT制約を使用してModDateを設定できるようにする方法を探していましたが、レコードを更新するときにEntity Frameworkから変更できるようにしました。だから説明のために、私は解決策を見つけたかもしれないと思ったが、DatabaseGeneratedOption.Identity
というフラグが立てられたレコードのModDateを変更しようとすると例外がスローされた。だからそこには運がない。
私はこれがあなたに役立つはずだと思いますhttp://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/ – V4Vendetta
ここで最高の定評があります: http://stackoverflow.com/questions/14385477/adding-createddate-to-anentity-using-entity-framework-5-code-first(そうでないかもしれません)。 – Chris