1

EffectiveAsOfとExpiredAsOfの日時フィールドを含むエンティティがいくつかあります。エンティティが変更されたら、SaveChangesメソッドをオーバーライドし、既存のエンティティを更新するのではなく、コードで元のレコードをデータベースに保存し、ExpiredAsOf日時を現在の時刻に設定し、新しいレコードに新しいデータを挿入します。 ExpiredAsOfをnullに設定して、EffectiveAsOfを現在の時刻に設定します。

objectStateEntryListのObjectStateEntryアイテムには、CurrentValuesオブジェクトとOriginal valuesオブジェクト、およびEntityオブジェクトが含まれていることを知っています。EFはDBにCurrentValuesデータまたはエンティティにデータを書き込むために何を使用しますか?新しいエントリを作成するにはどうすればよいですか?それとも、私はこれを完全に間違った方法で行っていますか?

私はこれをEFの外部のエンティティで処理できることを知っていますが、EFにこれらのエンティティを自動的に検出して処理させたいと考えています。

ジム、あなたの助けと洞察を事前に感謝します

4

1 に答える 1

0

EFはデフォルトで両方を使用します。元の値を使用して同時実行の問題をチェックし(つまり、DBからデータをロードしてからレコードが変更された場合)、エンティティの現在の値/変更された値を使用してDBレコードを更新します。

EFに「これらのエンティティを自動的に検出して処理」させることはできません。エンティティオブジェクトの新しいインスタンスを作成し、既存のエンティティオブジェクトから値をコピーし、両方のオブジェクトに適切な発効日と有効期限を設定し、新しいエンティティオブジェクトをDbContextに追加して、変更を保存する必要があります。これを行うのに最適な場所は、DbContextのSaveChanges()メソッドをオーバーライドすることです。可能な限りクリーンで管理しやすい状態に保つために、リポジトリパターンを使用することをお勧めします。

于 2013-03-26T18:43:07.797 に答える