2012-03-28 20 views
0

同じエンティティセットからアイテムを取得するページが複数あると言います。私は1つのページに新しいエンティティを追加した場合、私は両方のEntitySetコレクションとmyCollectionに追加する必要があります。EF:コレクションに新しいアイテムを追加し、他のすべてのコレクションに新しいアイテムが追加されたことを通知します。

Context.EntitySet.Add(item); 
myCollection.Add(item); 

新しいアイテムが追加(または削除)された他のページを通知するための最良の方法は何ですか?エンティティの編集は問題ありません。すべてのページが問題なく変更通知を受け取るためです。

+0

あなたは 'myCollection'の異なるインスタンスの代わりに' Context.EntitySet'を使用できますか?エンティティを格納する並列コレクションを作成するのはなぜですか? –

+0

あなたは私がEntitySetに直接バインドするアイデアを持っています。私が読んだ/見たすべての資料では、これは決して推奨されたオプションではありませんでした。とにかく、私はあなたがIEnumerable で提案したことを行うこともできます。ただ、各VMから同じインスタンスを参照するだけです。問題:同じコレクションに常に照会している場合、データストアから新鮮なデータを取得する方法は? – Goran

答えて

0

IEnumerable<T> myCollectionの異なるインスタンスにバインドする代わりに、Context.EntitySet<T>に直接バインドすることをお勧めします。 EntitySet<T>は、INotifyCollectionChangedINotifyPropertyChangedのインタフェースを実装しています。 EntitySet<T>の同じインスタンスにバインドすると、EntitySet<T>.CollectionChangedイベントに応答して各ページに変更が通知されることがあります。例:

// Page 1 
_myCollection = Context.EntitySet<MyItem>(); 
_myCollection.CollectionChanged += MyItemsChanged; 

... 

// Page 2 
_myCollection = Context.EntitySet<MyItem>(); 
_myCollection.CollectionChanged += MyItemsChanged; 

すべてのページがコレクションに追加または削除されると、すべてのページに通知されます。

ご意見に関して、IEnumerable<T>INotifyCollectionChangedインターフェイスを実装しておらず、変更通知を公開していません。最良の結果はEntitySet<T>を直接使用した場合です。

+0

IEnumerable の例を示しましたが、これは他のコレクションタイプ(ObservableCollection など)の作成に使用できるためです。それでも、あなたの方法は私には分かりません。私が常に同じソースにバインドしている場合(EntitySet )、これはデータがデータベースから一度だけ取得されることを意味します。ネットワーク上の他のユーザーが変更した新しいデータをいつどのようにクエリしますか? – Goran