number-6ren">
gpt4 book ai didi

mysql - 如何使用 MySql 解决 EntityFramework 的 DbUpdateConcurrencyException

转载 作者:行者123 更新时间:2023-11-29 12:05:22 27 4
gpt4 key购买 nike

当我尝试保存数据库更改时,我不断收到此错误:

> {"Store update, insert, or delete statement affected an unexpected
> number of rows (0). Entities may have been modified or deleted since
> entities were loaded. See
> http://go.microsoft.com/fwlink/?LinkId=472540 for information on
> understanding and handling optimistic concurrency exceptions."}

主程序例程为:

class Program
{
static void Main( string[] args )
{
var ctx = new SchoolContext();

Student stud = new Student();
stud.StudentID = 0;
stud.Height = 0.2;
stud.StudentName = "New Student";

ctx.Students.Add(stud);

ctx.SaveChanges();
}
}

DbContext 是:

public class SchoolContext : DbContext
{
public SchoolContext() : base("name=SchoolContext")
{
}

public virtual DbSet<Student> Students { get; set; }
}

模型是:

public class Student
{
public Student()
{
}

public int StudentID { get;set; }
public string StudentName { get;set; }
public double Height { get;set; }
}

我的app.config是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />
</providers>
</entityFramework>
<connectionStrings>
<add name="SchoolContext" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=test;uid=root;password=tree"/>
</connectionStrings>
</configuration>

我的packages.config文件是:

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net40" />
</packages>

我的数据库表定义为:

DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`Height` double(10,5) DEFAULT NULL,
`StudentId` int(2) DEFAULT NULL,
`StudentName` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

异常发生在主程序中的以下行:ctx.SaveChanges();

加载后没有任何其他代码可以修改我的条目,因此此异常没有意义。我的项目中唯一的文件是上面发布的文件。

有谁知道为什么会发生这种情况以及我应该如何解决它?

代码片段会非常有帮助。

谢谢。

最佳答案

通过编辑数据表使 SutdentID 主键解决了 DbUpdateConcurrencyException:

DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`Height` double(10,5) DEFAULT NULL,
`StudentId` int(2) NOT NULL,
`StudentName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`StudentId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

一切都按预期进行。现在,如果有人可以解释为什么由于缺少主键而应该引发这个误导性异常,这会给我一些结论......

谢谢。

关于mysql - 如何使用 MySql 解决 EntityFramework 的 DbUpdateConcurrencyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com