gpt4 book ai didi

c# - LINQ to SQL - 更新期间出现 DuplicateKeyException

转载 作者:行者123 更新时间:2023-11-30 16:33:29 25 4
gpt4 key购买 nike

下面列出的代码尝试更新数据库中的一行,但抛出异常:

System.Data.Linq.DuplicateKeyException: Cannot add an entity with a key that is already in use

我见过的大多数示例都查询数据库以获取实体的实例,修改实例的一些属性,然后更新它。在这里,我完全从不同的来源获取对象(它是从 XML 文件中解析的)并查询是否已经有一行用于此数据。如果有,我将设置主键并尝试运行更新。执行此操作的正确方法是什么?

这是代码的精简版:

Customer customer = new Customer(); // Customer has a database generated
// identity column called CustomerId

// populate customer object
customer.Name = "Mr. X";
customer.Email = "x@company.com";
// etc.

// is customer already in database?
// identify customer by email
var results = ctx.Where(c => c.Email == customer.Email); // ctx is a DataContext

if (results.Any())
{
Customer existing = results.Single();

// set primary key to match existing one
customer.CustomerId = existing.CustomerId;

// update database
customerTable.Attach(customer); // customerTable is a Table<Customer>
ctx.SubmitChanges();
}

// otherwise do insert
// ...

最佳答案

我是 LINQ to SQL 的新手,所以如果比我聪明的人发现这是错误的,请纠正我。但是,我相信您的问题是,当您进入 if 语句时,您正在从结果中获取实体(通过 results.Single())并将值设置为新客户对象。当您尝试将客户对象提交到数据库时,主键已经存在,因此您会收到错误。

相反,您想更新现有客户并将其提交回数据库。

关于c# - LINQ to SQL - 更新期间出现 DuplicateKeyException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150796/

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