[英]Violation of PRIMARY KEY constraint
我正在嘗試記錄唯一標識符,因此我無法承受我的 ID 的重復記錄
當我嘗試更新名為Clients
的 SQL Server 表時,我收到一個看起來像這樣的錯誤。
違反主鍵約束“PK_clients”。 無法在 object 'db_owner.clients' 中插入重復鍵。
代碼如下所示:
public void Subscribe(string clientID, Uri uri)
{
clientsDBDataContext clientDB = new clientsDBDataContext();
var client = new ServiceFairy.clientURI();
client.clientID = clientID;
client.uri = uri.ToString();
clientDB.clientURIs.InsertOnSubmit(client);
clientDB.SubmitChanges();
}
任何想法我如何 go 來解決這個問題,所以我可以更新我的行,我想做的就是當一行存在時只更新關聯的 URI,如果它不存在提交一個新的 clientID +網址,
謝謝
約翰
您要做的是首先檢查現有記錄,如果不存在,則添加新記錄。 您的代碼將始終嘗試添加新記錄。 我假設您使用的是 Linq2Sql(基於InsertOnSubmit
)?
public void Subscribe(string clientID, Uri uri)
{
using(clientsDBDataContext clientDB = new clientsDBDataContext())
{
var existingClient = (from c in clientDB.clientURIs
where c.clientID == clientID
select c).SingleOrDefault();
if(existingClient == null)
{
// This is a new record that needs to be added
var client = new ServiceFairy.clientURI();
client.clientID = clientID;
client.uri = uri.ToString();
clientDB.clientURIs.InsertOnSubmit(client);
}
else
{
// This is an existing record that needs to be updated
existingClient.uri = uri.ToString();
}
clientDB.SubmitChanges();
}
}
您需要獲取現有的object 並更新其uri
屬性,然后調用clientDB.SubmitChanges()
。 您現在擁有的代碼非常明確地要求它插入一條新記錄。
大概這樣的事情會起作用:
using (clientsDBDataContext clientDB = new clientsDBDataContext()) {
var client = clientDB.clientURIs.Where(c => c.clientID == clientID).Single();
client.uri = uri.ToString();
clientDB.SubmitChanges();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.