实体框架、DbContext、SaveChanges() 不起作用

本文关键字:不起作用 DbContext 框架 实体 SaveChanges | 更新日期: 2023-09-27 18:30:16

我在EF,DbContext和SaveChanges()方法上遇到了一个奇怪的问题。我正在使用EF 5,.NET 4.5和LocalDB。我正在使用代码优先 EF,并让它自动为我创建数据库。

问题出在数据库之后的任何事情。SaveChanges() 调用不会被调用。下面是一个示例:

private void Form1_Load(object sender, EventArgs e)
    {
        using (var db = new DataLayer.DataContext())
        {
            Group g = new Group {
                Id = 0,
                Gid = "019282",
                Name = "Admin"
            };
            db.Groups.Add(g);
            db.SaveChanges();
        }
        MessageBox.Show("Testing");
    }

消息框甚至不显示。知道发生了什么吗?它不会抛出任何错误,所以我什至无法调试它。

编辑:

我在输出中找到了以下内容。也许这就是原因。但是为什么不抛出异常呢?

A first chance exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll

编辑:

我认为这是我的错,当我从模型中删除属性时,我没有迁移。

实体框架、DbContext、SaveChanges() 不起作用

您是否尝试过使用 Sql Profiler 查看是否正在针对您的 LocalDB 实例执行任何 SQL?

如果模型中不一致,则可以启用自动迁移。您还可以针对模型设置一个标志,指示是否允许数据丢失 - 自动迁移数据丢失允许:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Configuration>());

自动迁移

表的主键是什么?如果是 Id,则很可能是一个自动递增字段。不要将其设置为零,只需将其排除在外,看看它是否有效。

using (var db = new DataLayer.DataContext())
{
    Group g = new Group {
            Gid = "019282",
            Name = "Admin"
        };
        db.Groups.Add(g);
        db.SaveChanges();
}