当前位置: 首页 > 编程语言 > C#

实体框架4.1DbSet重新加载分享

时间:2023-04-10 12:37:39 C#

实体框架4.1DbSet重新加载我正在使用单个DbContext场景实例在WPF应用程序中本地化DbContext数据库的整个副本。我听说这是不好的做法,但我的数据库很小,我需要在应用程序运行时在本地复制它的完整副本。IQueryable的扩展方法Load()允许我预加载DbSet的元素,这样我就可以将内容绑定到DbSet的Local属性。数据库中的数据变化很快,所以我想SaveChanges()并重新加载所有内容,甚至是已经跟踪的对象。再次调用Load()方法不会更新已加载的已跟踪但未标记为已更改的项。在DbSet中重新加载预加载项的首选方法是什么?在我的脑海中,我只能想到调用SaveChanges(),然后遍历所有条目并将跟踪值和原始值都设置为数据库中的当前值,然后Load()ing任何新对象可能已添加。在我的场景中,无法删除对象,但从长远来看,我可能不得不支持删除项目。这似乎不对,应该有一种方法可以删除所有内容并重新加载。丢弃我的上下文并重新开始似乎更容易,但是WPF中的所有元素都已经绑定到Local′ObservableCollection,这只会弄乱界面。这不是您应该如何使用DbContext,因此几乎不可能重新加载数据。长时间保持单一上下文是不正确的用法。该链接还将回答为什么未更新未跟踪的实体。您可以通过在DbEntityEntry上调用Reload来选择性地重新加载单个实体:context.Entry(entity).Reload();您还可以恢复到ObjectContext并将ObjectQuery与MergeOption.OverrideChanges结合使用,或者将Refresh与RefreshMode.StoreWins实体RefreshMode.StoreWins结合使用。所有这些方法都存在一些问题:获取新数据的唯一正确方法是处理上下文,创建一个新的上下文并从头开始加载所有内容——无论如何你都在做。在EntityFramework4.1中,WPF数据绑定的建议已更改为使用.Local和持久性DbContext。http://blogs.msdn.com/b/efdesign/archive/2010/09/08/data-binding-with-dbcontext.aspx当然,随意处理它,但如果你这样做,它会产生负面影响对UI的影响。这是另一种方法,但我不确定它是否需要成为EF4.1的功能:http://msdn.microsoft.com/en-us/library/cc716735.aspxDbContexts应该是短暂的,保存后更改处理它并从头开始重新加载。有两组对象..一组来自数据库,一组来自绑定。请使用()进行增删改查。它会自动重新加载更新的数据。using(myDbContextcontext=newmyDbContext()){}Bestregards,ThetTinOo以上是C#学习教程:entityframework4.1DbSet重新加载所有分享的内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: