【发布时间】:2011-08-13 13:44:27
【问题描述】:
我正在使用 DbContext 场景的单个实例在 WPF 应用程序中本地隐藏整个数据库副本。我听说这是不好的做法,但我的数据库很小,并且在应用程序运行时我需要在本地获得完整的副本。
IQueryable、Load() 的扩展方法让我可以预加载DbSet<> 的元素,这样我就可以将事物绑定到DbSet<> 的Local 属性。数据库中的数据变化很快,所以我想SaveChanges() 并重新加载一切,甚至是已经跟踪的对象。再次调用Load() 方法不会更新已跟踪但未标记为已更改的项目。
在DbSet<> 中重新加载预加载项的首选方法是什么?在我的脑海中,我只能想到调用SaveChanges(),然后遍历所有条目并将跟踪值和原始值设置为数据库中的当前值,然后Load() 可能已添加的任何新对象。在我的场景中,不可能删除对象,但从长远来看,我可能必须支持项目删除。这似乎不对,应该有一种方法可以删除所有内容并重新加载。似乎放弃我的上下文并重新开始更容易,但是 WPF 中的所有元素都已经绑定到Local´ObservableCollection<>,这只会弄乱界面。
【问题讨论】: