変更を追跡する N 層ソリューションに関する Julia Lerma の著書「DbContext」に従って、各エンティティに State プロパティと OriginalValues ディクショナリを (IObjectWithState を介して) 提供しました。エンティティが作成されたら、元の値をこのディクショナリにコピーします。本のこのサンプル (4-23) を参照してください。
public BreakAwayContext()
{
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += (sender, args) =>
{
var entity = args.Entity as IObjectWithState;
if (entity != null)
{
entity.State = State.Unchanged;
entity.OriginalValues = BuildOriginalValues(this.Entry(entity).OriginalValues);
}
};
}
(DbContext から継承された) BreakAwayContext のコンストラクターで、ObjectMaterialized イベントがキャッチされます。エンティティの元の値を取得するには、this.Entry(entity) の呼び出しによってコンテキストから DbEntityEntry を取得します。この呼び出しにより、プロセスが遅くなります。このイベント ハンドラーの時間の 80% がこの呼び出しに費やされます。
元の値またはエンティティ DbEntityEntry を取得するより高速な方法はありますか?