【问题标题】:EF Core - Saving changes are not adding new recordEF Core - 保存更改不会添加新记录
【发布时间】: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(); 来启动的。

我的问题是 - 在 DebugViewChangeTracker 内部上下文中的 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


【解决方案1】:

你确定你检查的数据库吗?您可能正在检查错误的数据库。请确定您的连接字符串和服务器/数据库参数是相同的。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多