0

次のように、データベースからメモを読み込んで、WPFコントロールにバインドしています。

this.DBContext.Notes.Where(n => n.ID == selectedNote.ID).Load();
this.notesBox.DataContext = this.DBContext.Notes.Local;

ローカルビューからアイテムを削除したい場合...

this.DBContext.Local.Notes.Remove(selectedNote);
this.notesBox.DataContext = this.DBContext.Notes.Local;

... notesBoxに表示されなくなりましたが、ノートをもう一度選択すると、ローカルビューにロードできなくなりました。

質問:.Load()がデータセットをローカルビューにロードする場合、後で再ロードできるように、ローカルビューからデータをアンロードする適切な方法は何ですか?

(DBContext.SaveChanges()を実行した場合、Local.Remove(entity)が実際にデータベースからアイテムを削除すると想定しているため、再度ロードできません)

4

1 に答える 1

1

ローカルから削除するとDbSetからも削除されるため、データベースから削除されるという点で正しいです。

データベースに変更を加えないコレクションを変更する場合は、Notesクエリから新しい監視可能なコレクションを作成してバインドする必要があります。

var collection = new ObservableCollection<Note>(this.DBContext.Notes.Where(n => n.ID == selectedNote.ID)); 
this.notesBox.DataContext = collection;

このようにして、データベースを変更せずに新しいコレクションを削除/変更できます。

于 2012-09-30T02:47:31.447 に答える