下面試圖更新數據庫中的一行列出的代碼中DuplicateKeyException,但不是拋出一個異常:的LINQ to SQL - 更新
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 = "[email protected]";
// 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的新手如何工作? – JasCav 2010-06-30 15:43:02
我試過了。它給了我同樣的錯誤。 – MCS 2010-06-30 15:43:10
在我看來,customerTable.Attach(客戶,現有)也應該有效。但是,如果我沒有設置customer.CustomerId,我得到的錯誤:System.InvalidOperationException:類型爲'Customer'的對象的成員'CustomerId'的值發生了變化。定義對象身份的成員不能更改。當我設置Customer.CustomerId時,我得到了DuplicateKeyException!去搞清楚。 – MCS 2010-06-30 17:26:25