No quiero que mis actualizaciones agreguen si la entidad no existe

Quiero poder proporcionar un método de ACTUALIZACIÓN a mis usuarios que actualizará el registro que especifican en función de RowKey, pero NO lo AGREGARÁ si la RowKey que pasan no existe.

Mi razonamiento es que si envían por error una RowKey no válida, no quiero que sin saberlo terminen con una nueva entidad en lugar de haber actualizado la que tenían la intención de actualizar en primer lugar.

Aquí está la esencia del código que tengo (pero que agrega / inserta la entidad si no existe):

 ' p below is the entity obj (Inherits from TableServiceEntity) 
 ' PartitionKey and RowKey are set to values of entity to update 
     MyBase.AttachTo(_tableName, p)
     MyBase.UpdateObject(p)
     MyBase.SaveChangesWithRetries(Services.Client.SaveChangesWithOptions.Batch)

Mi problema es que esperaba obtener alguna excepción cuando se ejecutaba SaveChanges y no se encontró ninguna entidad con PK y RK coincidentes. En su lugar, se agrega la entidad con la nueva combinación PK, RK.

¿Cómo puedo estructurar mi código para que solo se realice una ACTUALIZACIÓN y no AGREGAR si PK, RK no existe?

preguntado el 09 de marzo de 12 a las 16:03

2 Respuestas

Creo que si llama a la versión de tres argumentos de AttachTo (), obtendrá el comportamiento deseado.

MyBase.AttachTo(_tableName, p, "*");

Pero en realidad no lo he probado.

respondido 09 mar '12, 18:03

Esto funciona ya que SaveChangesWithRetries ahora arroja lo que parece ser una excepción muy general si no se encuentra la entidad para actualizar ("Se produjo un error al procesar esta solicitud" y el campo Fuente está configurado en "Microsoft.WindowsAzure.StorageClient"). Sin embargo, la información clave que buscaba se encuentra en InnerException, donde se encuentra el código de estado = 404 (ResourceNotFound) y Source = "System.Data.Services.Client .: que se debe a que no se encontró la entidad que estábamos tratando de actualizar. Por lo tanto, agregué un intento de captura donde atrapo: Hjalmar

En lugar de detectar un error cuando intenta actualizar un elemento que no existe (creo que breischl tiene razón sobre cómo evitarlo), lo más fácil sería ejecutar una consulta para verificar si realmente existe primero.

respondido 11 mar '12, 05:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.