-1

ObservableCollection<T>一部のデータを一部のビューにバインドするために使用しています。DB の既存のデータを編集しているときに、ビュー モデルで単一のメソッドを呼び出すだけでデータ編集を保存できますSavechanges()。コレクションに新しい項目を追加して編集することもできますが、SaveChanges()メソッドは追加の行を db に挿入しません。

ビューモデルに渡されるエンティティがわかりません。T は複数のエンティティのマージされたクラスなので、これを行う必要があります。コンストラクターで:

collection=globalContext.TSet;
//the collection and context are defined in class level

新しいアイテムを取得するコード:

collection.Add(New T());
CurrentItem=collection.Last();

コレクションは現在編集中のアイテムですObservableCollection<T>CurrentItem

編集:context.ChangeTracker.Entries新しいオブジェクトを認識しません。

私はいくつかの結合クエリの結果である複雑なタイプ(たとえばT)を持っています.Tがどのエンティティから作成されているのかわかりません.追加したい。

したがって、変更トラッカーに、結合クエリの結果である複合型から新しいオブジェクトを作成させる必要があります。

私はEF4.3.1を使用しています

助言がありますか?

ありがとうございました。

4

2 に答える 2

0

新しいエンティティを TSet に追加していません。これを自動的に行うには、TSet.Add(t) を呼び出すか、ObservableCollection の CollectionChanged イベントをフックする必要があります。

于 2013-05-14T06:24:31.993 に答える
0

データベースが更新されていません。IDbSet を介してビュー (またはビュー モデル) の DBSet を変更し、DbContext.SaveChanges を発行します。これは、ObservableCollection を直接変更する代わりに行います。その後、ObservableCollection はそれ自体を更新し、ビュー モデルとビューを更新する必要があります。データベースを再クエリして新しい DbSet を生成しない場合は、ビュー モデルの DbSet.Local から新しい ObservableCollection を取得し、そこから新しいビューを作成します。

于 2012-04-17T20:27:35.893 に答える