使用EF4 CTP5 DbContext,相当于此
public void Refresh(Document instance)
{
_ctx.Refresh(RefreshMode.StoreWins, instance);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过了,但它不会做同样的事情,更新实例
public void Refresh(Document instance)
{
_ctx.ChangeTracker.DetectChanges();
}
Run Code Online (Sandbox Code Playgroud)
?
我正在使用一个DbContext场景实例在WPF应用程序中本地隐藏数据库的整个副本.我听说这是不好的做法,但我的数据库很小,我需要在应用程序运行时在本地完整复制它.
一个扩展方法IQueryable,Load()让我预加载一个元素DbSet<>,这样我就可以将东西绑定到Local属性了DbSet<>.数据库中的数据变化很快,所以我想SaveChanges()重新加载所有内容,甚至是已经跟踪过的对象.Load()再次调用该方法不会更新已加载的已跟踪但未标记为已更改的项目.
重新加载预装物品的首选方法是DbSet<>什么?在我的脑海中,我只能想到调用SaveChanges(),然后遍历所有条目并将跟踪和原始值都设置为数据库中的当前值,然后Load()是可能添加的任何新对象.在我的场景中,不可能删除对象,但从长远来看,我可能不得不支持删除项目.这似乎不对,应该有办法放弃一切并重新加载.看起来更容易删除我的上下文并重新开始,但是WPF中的所有元素都已经绑定了Local´ObservableCollection<>,这只是弄乱了界面.