C# 如何使用数据库优先的方法刷新DbContext

C# 如何使用数据库优先的方法刷新DbContext,c#,entity-framework,mvvm,C#,Entity Framework,Mvvm,问题:我们有一个可能是多用户环境的应用程序。由于实体的缓存,我们无法在发生更改时/之后看到数据库中的其他用户更改。我不希望连续轮询数据库。如果用户可以单击刷新按钮,让上下文从数据库中获取新信息,我就可以了 值得注意的事项: -我们正在使用寿命相当长的缓存,并希望保留它。 -只想寻找一种方法,用数据库中的最新值刷新上下文 如有任何见解,将不胜感激。我可以根据要求提供代码示例 谢谢您可以执行以下操作: _dbContext.ChangeTracker.Entries().Where(e =>

问题:我们有一个可能是多用户环境的应用程序。由于实体的缓存,我们无法在发生更改时/之后看到数据库中的其他用户更改。我不希望连续轮询数据库。如果用户可以单击刷新按钮,让上下文从数据库中获取新信息,我就可以了

值得注意的事项: -我们正在使用寿命相当长的缓存,并希望保留它。 -只想寻找一种方法,用数据库中的最新值刷新上下文

如有任何见解,将不胜感激。我可以根据要求提供代码示例

谢谢

您可以执行以下操作:

_dbContext.ChangeTracker.Entries().Where(e => e.Entity != null).ToList()
            .ForEach(e => e.State = EntityState.Detached);

如果要从数据库重新加载单个实体,可以执行以下操作:

Context.Entry<T>(entity).Reload()

是否正在查找类似的内容?:Context.Entryentity.Reload从数据库中重新加载实体无法查看其他用户在数据库中的更改是什么意思?这对你有帮助吗?DbContext的使用寿命是多长?即,您是否为每个请求/每个查询创建新的上下文?您是否将上下文视为在所有请求中共享的单个实例?它是在所有请求中共享的。@重新路由您使用了我的解决方案,但将另一个标记为正确答案!非常感谢。这是很有帮助的,但我最终还是改变了一点。var test=\u Database.ChangeTracker.Entries.Whereentry=>entry.Entity as Class1!=null.Whereentry=>entry.Entity作为Class2!=无效的测试{dbEntityEntry.Reload;}中的foreach var dbEntityEntry;我使用的是VS 2017、.Net Framework 4.5.2和EF 4。没有DataClasses1DataContext.Entry方法。我使用的是VS 2017、.Net Framework 4.5.2和EF 4。没有DataClasses1DataContext.ChangeTracker方法。