tutorial query español ejemplos c# linq

query - linq c# tutorial español



Actualización en Linq (4)

¿Cómo puedo actualizar una entidad que está desconectada de la base de datos?

El siguiente código no se ejecuta correctamente y arroja InvalidOperationExcepiton.

public void Foo() { DataContext context = new DataContext(); LinqEntity item = new LinqEntity(){ Id = 1, Name = "John", Surname = "Doe"} ; context.LinqEntities.Attach(item, true); }


Al utilizar un ORM, normalmente selecciona un objeto antes de actualizarlo.

Puede usar DataContext.ExecuteCommand(...) para omitir el ORM si no desea hacer una selección.


De acuerdo, si intentas actualizar una fila con ID = 1, lo harás así:

DataContext context = new DataContext(); LinqEntity item = (from le in context.LinqEntities where le.ID == 1 select le).Single(); item.Name = "John"; item.Surname = "Doe"; context.Submit();

También podría reemplazar la expresión Linq con una lambda más concisa:

LinqEntity item = context.LinqEntities.Single(le => le.ID == 1);

Lo más importante que hace DataContext es realizar un seguimiento de los cambios que realice, de modo que cuando llame al método Enviar genere automáticamente las instrucciones Insertar para las cosas que ha modificado.


No estoy seguro de lo que quiere decir con desconectado de la base de datos.

Parece que está intentando insertar una nueva fila en la tabla LinqEntities. ¿Es correcto?

Si ese es el caso, querrás hacer

context.LinqEntities.InsertOnSubmit(item); context.Submit();


Por defecto, las entidades usarán todos los campos para verificar la concurrencia al hacer ediciones. Eso es lo que arroja la InvalidOperationException.

Esto puede configurar la propiedad Comprobar comprobación para todos los campos en Nunca. Esto debe hacerse en todos los campos para adjuntar la entidad como modificada. Si esto se hace, una llamada adicional a context.SubmitChanges () guardará los datos.

Alternativamente, si conoce los valores originales, puede adjuntar y luego hacer las actualizaciones, pero todos los valores que se están comprobando deben coincidir con los valores originales.

LinqEntity item = new LinqEntity(){ Id = 1, Name = "OldName", Surname = "OldSurname"}; context.LinqEntities.Attach(item); item.Name = "John"; item.Surname = "Doe"; context.SubmitChanges();