tabla restricción puedo infracción escribir duplicada clave c# sql-server linq-to-sql

c# - puedo - Violación de la restricción PRIMARY KEY



infracción de la restricción unique key (2)

Necesita obtener el objeto existente y actualizar su propiedad uri y luego llamar a clientDB.SubmitChanges() . El código que tiene en este momento explícitamente le pide que inserte un nuevo registro.

Es de suponer que algo así podría funcionar:

using (clientsDBDataContext clientDB = new clientsDBDataContext()) { var client = clientDB.clientURIs.Where(c => c.clientID == clientID).Single(); client.uri = uri.ToString(); clientDB.SubmitChanges(); }

Intento registrar identificadores únicos, por lo que no puedo permitirme tener un registro duplicado de mis identificaciones

Me aparece un error que se ve así cuando trato de actualizar mi tabla de SQL Server llamada Clients .

Violación de la restricción PRIMARY KEY ''PK_clients''. No se puede insertar la clave duplicada en el objeto ''db_owner.clients''.

El código para esto se ve así:

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(); }

Cualquier Idea sobre cómo puedo solucionar esto, para poder actualizar mis filas, todo lo que quiero hacer es cuando existe una fila, luego solo actualizo el URI asociado, y si no existe para enviar un nuevo ID de cliente URI,

Gracias

John


Lo que quiere hacer es verificar primero el registro existente y, si no existe, agregar uno nuevo. Tu código siempre intentará agregar un nuevo registro. Supongo que está utilizando Linq2Sql (basado en 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(); } }