从数据上下文的本地视图中卸载项目

时间:2012-09-29 22:31:10

标签: c# wpf entity-framework entity-framework-4.1

我正在从数据库加载注释以将它们绑定到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(实体)实际上会从数据库中删除该项,这就是我无法将其加载回来的原因

1 个答案:

答案 0 :(得分:1)

你是正确的,从本地删除也会将它从DbSet中删除,因此它将从数据库中删除。

如果您想要修改一个不会导致数据库更改的集合,您应该从Notes查询创建一个新的可观察集合并绑定到它:

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

这样您就可以在不修改数据库的情况下删除/修改新集合。