c# - 如何刷新 Entity Framework Core DBContext?

标签 c# .net-core entity-framework-core

当我的表被另一方更新时,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/

相关文章:

c# - 何时/何地使用 azure 后端刷新 Windows 10 应用程序中的访问 token

entity-framework - Microsoft.EntityFrameworkCore.Tools.DotNet v2.0.1

c# - EF.Core 3.x生成窗口函数而不是JOIN,导致MySQL语法错误

c# - EF Core 5 - 如何将 EF.Functions.Like 与映射到 JSON 字符串的自定义属性一起使用?

sql-server - 脚手架-DbContext "Login Failed" "Error Number:4060,State:1,Class:11"

c# - 使用 iTextSharp HTMLWorker 在 HTML 中设置新页面(html 到 pdf)

c# - 使用/不使用 pdb 文件调试 C# 生产应用程序

c# - .NET Core/EF Core 2.0 升级后急切加载 "No coercion operator is defined between types"

c# - 如何编写可扩展的基于 TCP/IP 的服务器

visual-studio-code - 在 Visual Studio 代码中构建/运行/任务多个 dotnet 项目?