gpt4 book ai didi

c# - 即使我没有更新 id 列,也会出现 System.Data.Entity.Infrastruct.DbUpdateException 错误

转载 作者:行者123 更新时间:2023-11-29 19:10:38 24 4
gpt4 key购买 nike

我正在开发一个项目,其中使用 Entity Framework 来操作 sql server 2014 上的数据库。我的代码如下:

private void BtnAddUser(object sender, EventArgs e)
{
var u = new User();
u.username = txtBoxNewUser.Text;
u.password = txtBoxNewPass.Text;
u.rank = cmbBoxRank.GetItemText(this.cmbBoxRank.SelectedItem);
using (var db = new ProjetPooEntities2())
{
db.Users.Add(u);
db.SaveChanges();
}

}

请注意,代码运行完美,但是当我按“添加”按钮将创建的用户添加到数据库时,“db.saveChanges()”上会显示错误,并显示:

System.Data.Entity.Infrastructure.DbUpdateException: 'An error occurred while updating the entries. See the inner exception for details.' And the inner exception is: SqlException: Cannot insert explicit value for identity column in table 'User' when IDENTITY_INSERT is set to OFF.

我已将数据库中的标识列设置为“id”,并将其设置为从 1 开始自动递增 1。我尝试寻找很多解决方案,但一无所获。任何帮助将不胜感激!!

最佳答案

假设User实体具有以下结构:

public class User
{
public int id { get; set; }
public string username { get; set; }
public string password { get; set; }
public string rank { get; set; }
}

如果使用Code First,请添加带有选项DatabaseGeneeratedOption.IdentityDatabaseGenerateAttribute,将id设置为身份自动增量属性:

public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
... // other properties
}

但是,如果使用数据库优先,请打开 EDMX 模型设计器,使用 id 字段上的“属性”上下文菜单,并将 StoreGeneratePattern 设置为 身份:

StoreGeneratedPattern.Identity

然后,使用 XML 编辑器打开 EDMX 文件,并确保其 id 属性上具有 StoreGeneratePattern="Identity",如下所示:

<EntityType Name="User">
<Key>
<PropertyRef Name="id" />
</Key>
<Property Name="id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
</EntityType>

如果此后上述方法仍然不起作用,您可以在 DbContext 中执行 SET IDENTITY_INSERT 查询(必须使用 StoreGeneratePattern="None 进行恢复) “ 在 EDMX 中或在 Code First 中的 DatabaseGenerate(DatabaseGenerateOption.None) 才能正常工作):

using (var db = new ProjetPooEntities2())
{
// taken from /a/31856991
db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] ON");
db.Users.Add(u);
db.SaveChanges();
db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF");
}

请注意,这里的这种最底层方法被认为不是一个好的做法,因为在某些情况下可能允许插入重复值。

相关问题:

Cannot insert explicit value for identity column in table 'table' when IDENTITY_INSERT is set to OFF

How can I force entity framework to insert identity columns?

关于c# - 即使我没有更新 id 列,也会出现 System.Data.Entity.Infrastruct.DbUpdateException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43112270/

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