INotifyPropertyChangedを実装する共通のビジネスベースクラスから継承するPOCOがいくつかあります。DALでもEF5を使用しています。以下のように、単一の競合オブジェクトに対してフェッチを実行する場合:
public ICompetitorCard Fetch(long id)
{
return this.Fetch<ContactCardContext, ICompetitorCard>(
() => { return ContactCardContext.GetInstance(this); },
ctx =>
{
var query = from competitor in ctx.Competitors
where competitor.Id == id
select competitor;
return query.SingleOrDefault();
}, "ICompetitorCard Fetch(long id) failed");
}
EF5でうまく埋められたCompetitorCardオブジェクトを取り戻します。問題は、DALからロードするときに通知を起動したくないということです。したがって、通常、オブジェクトが初期化されているかどうかを追跡するある種のフィールドを設定する場合があります。これは「通常」に実装するのは簡単ですが、この場合はEFがロードを実行しているため、設定するためにどのイベント/仮想メソッドにフックする必要があるのか疑問に思います。
IsInitialised = true;
その後、プロパティ通知が発生するように。私は次のようなことができると思います:
ICompetitorCard card = query.SingleOrDefault();
if (card!=null){card.IsInitialised = true;}
return card;
しかし、それは過度に冗長に見え、カプセル化を破り、コレクションなどにとって苦痛です。それで、INotifyPropertyChangedの独自の実装を処理する人にとって、EF5でこれをどのように管理していますか?