【发布时间】:2021-10-18 08:59:45
【问题描述】:
我查看了 Stack 上的许多线程,但没有找到任何解决方案。我有简单的代码将记录添加到只包含一列的表 - 主键。像这样:
public partial class XSavedList
{
public int XId { get; set; }
}
我将此表用作列表来保存已处理的数字。我想通过 EF Core 添加一些数字:
private static void AppendNewNumberInSavedList(int id)
{
try
{
using (var db = new xContext())
{
var newObject =
new XSavedList()
{
XId = id
};
db.XSavedList.Add(newObject);
db.SaveChanges();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
此方法是通过创建带有此方法的 Action 的 Task 和代码中某处的 .Start(); 来启动的。
我的问题是 - 在 DebugView 的 ChangeTracker 内部上下文中的 db.SaveChanges(); 之后,我可以看到我添加的状态为 Unchanged 的记录。实际上,EF Core 并未向数据库添加新记录。在SaveChanges(); 之前DebugView 中的同一记录显示状态Added。也不例外,不知道为什么 EF 没有添加记录。
规格:.NET 5.0 / EF Core 5.0.9 / MySql.EntityFrameworkCore 5.0.5 / VS2019
【问题讨论】:
-
可能是因为你还没有等待Task。尝试不启动任务。 MySql.EntityFrameworkCore 也是错误的提供者,更糟糕的是它不支持异步操作。请改用
Pomelo提供程序。 -
@SvyatoslavDanyliv 请详细说明。为什么我要尝试不启动任务?为什么我要等待构造函数创建任务?方法正在运行,我可以告诉对象在保存更改前后的状态。更改不会保存,无论我等待多久。对于提供商,我对 Pomelo 的体验很糟糕(实际上无法正确使用它,在 EF Core 3.1 上它是如此的错误,我很快就放弃了)所以我坚持使用官方提供商。
-
那么,您的代码无需额外任务即可运行?
-
上下文的生命周期是什么?您是否为每个任务创建新的上下文?因为 DbContext 不是线程安全的。
-
你能告诉我们
xContext类吗?正如@ToldaCakir 指出的那样,您如何将您的上下文与您的数据库相关联?
标签: c# .net-core entity-framework-core