当我的表被另一方更新时,dotnet core 中的数据库上下文仍然返回旧值,我如何强制刷新数据库上下文?
我做过研究,但我只发现人们使用 Reload
方法来强制刷新上下文,这在 EF 核心中不可用。
其他一些解决方案建议在使用后处理上下文,但我收到错误消息说数据库上下文是由依赖注入(inject)创建的,我不应该搞砸它。
最佳答案
哦,这个问题让我纠结了好几天。
我将 Visual Studio 2017 与 .Net Core 2.1 结合使用,我的 EF Core 代码如下所示:
// 1. Load a [User] record from our database
int chosenUserID = 12345;
User usr = dbContext.Users.FirstOrDefault(s => s.UserID == chosenUserID);
// 2. Call a web service, which updates that [User] record
HttpClient client = new HttpClient()
await client.PostAsync("http://someUrl", someContent);
// 3. Attempt to load an updated copy of the [User] record
User updatedUser = dbContext.Users.FirstOrDefault(s => s.UserID == chosenUserID);
在第 3 步,它会简单地将“updatedUser”设置为 [User] 记录的原始版本,而不是尝试加载新副本。因此,如果在第 3 步之后,我修改了 [用户] 记录,我实际上会丢失网络服务应用到它的任何设置。
我 - 最终 - 找到了两个解决方案。
我可以更改 ChangeTracker
设置。这行得通,但我担心这样做的副作用:
dbContext.ChangeTracker.QueryTrackingBehavior = Microsoft.EntityFrameworkCore.QueryTrackingBehavior.NoTracking;
或者,在尝试重新加载 [User] 记录之前,我可以输入以下命令...
await dbContext.Entry(usr).ReloadAsync();
这似乎迫使 .Net Core 重新加载该 [User] 记录,生活再次变得美好。
我希望这是有用的...
追踪并修复这个错误花了我好几天的时间....
还有一篇出色的文章描述了解决此缓存问题的各种方法 here .
关于c# - 如何刷新 Entity Framework Core DBContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46205114/