visual tutorial studio hacer ejemplos consulta conexion con como c# linq linq-to-sql datacontext

studio - linq to sql c# tutorial



¿Qué hace LINQ-to-SQL Table<T>.Attach? (2)

¿Qué hace exactamente el método LINQ-to-SQL Table<T>.Attach() y Table<T>.AttachAll() y cuál es un ejemplo / situación para su uso adecuado?

Además, consulte esta pregunta relacionada: ¿Cómo separar un objeto de datos LINQ-to-SQL del mecanismo de rastreo del DataContext?


Es realmente útil en aplicaciones de múltiples niveles que serializan / deserializan datos a otras capas.

Version corta:

Attach() le dice a DataContext que la entidad no es nueva (para insertar ) sino una entidad actualizada que se debe actualizar en la base de datos.

Versión larga:

Tienes un DataContext donde existen tus entidades. Se insertan nuevas entidades, se actualizan las existentes. Ahora necesita enviar alguna entidad a otro nivel, luego DataContext separa dicha entidad y la envía.
En el otro nivel, la entidad se modifica y se envía de vuelta a su capa de datos. Ahora es posible que el antiguo DataContext que tenía su entidad ya no exista (por ejemplo, si no tiene estado) o que no conozca a su entidad deserializada, ¿qué hace? Crea un nuevo DataContext o usa uno existente y usa el método Attach() , de esta manera el DataContext sabe que la entidad debe actualizarse y no debe insertarse en la base de datos.

Lo mismo ocurre con AttachAll() pero para múltiples entidades.


LINQ to SQL mantiene el estado de las entidades en un objeto DataContext. Las entidades que se cargan desde la base de datos están asociadas con un DataContext que es responsable de rastrear cualquier cambio en la entidad, de modo que cuando lo guarde, se realicen los cambios apropiados en la base de datos.

Las entidades pueden desvincularse del DataContext cuando se serializan (para pasar a un cliente, por ejemplo, en una aplicación de n niveles). Cuando el cliente devuelva la entidad a su capa DA, deberá volver a adjuntarla a un DataContext antes de que se pueda actualizar o eliminar en la base de datos. El método Attach realiza esta operación.