Estoy usando EF Core 3.1 tengo el siguiente código
public void Update()
{
Client client = new Client();
client.ClientId = 1;
client.Name = "New Client 1";
dbContext.Entry<Client>(client).State = EntityState.Modified;
dbContext.Entry<Client>(client).Property(x => x.IdentityNumber).IsModified = false;
dbContext.SaveChanges();
}
que produce el siguiente SQL y actualiza con éxito la columna
UPDATE [Client]
SET [Name] = @p0
WHERE [ClientId] = @p1;
SELECT @@ROWCOUNT;
Sin embargo, cuando cambio el ClientId = 4
que es una entrada que se eliminó de la base de datos, produce la misma consulta SQL pero arroja el siguiente error
Se espera que la operación de la base de datos afecte a 1 fila (s) pero en realidad afectó a 0 fila (s). Los datos pueden haber sido modificados o eliminados desde que se cargaron las entidades
El mensaje de error es claro, pero no entiendo por qué no funciona como funciona SQL Server (0 filas afectadas) y en su lugar arroja este error.
¿Cómo puedo simular el comportamiento de SQL Server afectado por 0 filas con EF Core?
No quiero consultar la base de datos primero si existe la fila y luego actualizar. El código anterior es una muestra. En mis métodos, tengo listas con muchos clientes que necesito actualizar a la vez y me lleva mucho tiempo hacerlo usando la primera verificación si existe y luego actualizar.
No quiero consultar la base de datos primero si existe la fila y luego actualizar.
Este es el quid de su problema y la razón del error.
Nuestro enfoque, y uno común, creo, es usar Dapper al manipular una gran cantidad de datos, y limitar EF a Cargar -> Editar -> Guardar operaciones en entidades únicas o muy pocas.