我正在尝试记录唯一标识符,因此我无法承担我的ID的重复记录
当我尝试更新名为Clients
的SQL Server表时,我收到的错误如下所示。
违反PRIMARY KEY约束'PK_clients'。无法插入 对象'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();
}
任何想法如何解决这个问题,所以我可以更新我的行,我希望能够做的就是当存在一行时只更新相关的URI,如果它不存在则提交新的clientID + URI,
由于
约翰
答案 0 :(得分:4)
您要做的是首先检查现有记录,如果它不存在,然后添加一个新记录。您的代码将始终尝试添加新记录。我假设您正在使用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();
}
}
答案 1 :(得分:3)
您需要获取现有对象并更新其uri
属性,然后调用clientDB.SubmitChanges()
。您现在拥有的代码非常明确地要求它插入新记录。
大概这样的事情会起作用:
using (clientsDBDataContext clientDB = new clientsDBDataContext()) {
var client = clientDB.clientURIs.Where(c => c.clientID == clientID).Single();
client.uri = uri.ToString();
clientDB.SubmitChanges();
}