哦,这个问题让我纠结了好几天。
我将 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”设置为original[用户] 记录的版本,而不是尝试加载新副本。所以,如果在第 3 步之后,我modified那个 [用户] 记录,我实际上会丢失网络服务应用于它的任何设置。
我最终找到了两个解决方案。
我可以改变ChangeTracker
设置。这有效,但我担心这样做的副作用:
dbContext.ChangeTracker.QueryTrackingBehavior = Microsoft.EntityFrameworkCore.QueryTrackingBehavior.NoTracking;
或者,在尝试重新加载 [用户] 记录之前,我可以输入以下命令......
await dbContext.Entry(usr).ReloadAsync();
这似乎迫使 .Net Core 重新加载该 [User] 记录,生活再次美好。
我希望这有用...
追踪并修复这个错误花了我几天的时间......
还有一篇很棒的文章描述了解决此缓存问题的各种方法here http://codethug.com/2016/02/19/Entity-Framework-Cache-Busting/.