我有一个存储过程可以更改数据库中的大量数据。从应用程序调用此存储过程,同时使用EF进行数据操作。
所以我点击一个按钮,存储过程在数据库中运行,数据被更改,EF显示旧数据给用户。
有没有办法强制DbContext或ObjectContext刷新数据库中的数据? ObjectContext.Refresh()可能是解决方案,但我不想为每个可能更改的表调用此方法。我希望一次性刷新所有表格。
我正在使用Entity Framework 5,面向.NET 4.0
编辑:已添加数据,但现有数据的修改未反映在EF上。我看到新添加的记录,但我看不到我对现有记录所做的更改。
答案 0 :(得分:16)
你的DbContext
应该是短暂的。创建它,运行查询并处理它。
using (var context = new MyProject.DbContext())
{
// run your query here
}
不要保持你的背景。这样你就不会对旧数据产生任何问题。
答案 1 :(得分:3)
db = new DbContext())
var context= ((Infrastructure.IObjectContextAdapter)db).ObjectContext;
context.Refresh(Core.Objects.RefreshMode.StoreWins, context.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged | EntityState.Modified))