Table<TEntity>.Attach Método

Definición

Adjunta una entidad a DataContext.

Sobrecargas

Attach(TEntity)

Adjunta una entidad desconectada o "separada" a un nuevo objeto DataContext cuando se requieren los valores originales para las comprobaciones de simultaneidad optimista.

Attach(TEntity, Boolean)

Adjunta una entidad a DataContext en un estado modificado o no modificado.

Attach(TEntity, TEntity)

Adjunta una entidad a DataContext en un estado modificado o no modificado especificando la entidad y su estado original.

Comentarios

Use los Attach métodos con entidades que se han creado en un DataContext, serializado en un cliente y, a continuación, deserializado de nuevo (con la intención de realizar una operación de actualización o eliminación). Para obtener más información, consulta Recuperación de datos y operaciones CUD en aplicaciones de N niveles (LINQ to SQL).

No intente una Attach entidad que no se haya desasociado mediante la serialización. Las entidades que no se han serializado siguen manteniendo asociaciones con cargadores diferidos que pueden provocar resultados inesperados si un segundo contexto de datos realiza un seguimiento de la entidad.

Cuando se adjunta una nueva entidad, se inicializan los cargadores diferidos de las colecciones secundarias (por ejemplo, EntitySet las colecciones de entidades de las tablas asociadas). Cuando SubmitChanges se llama a , los miembros de las colecciones secundarias se colocan en un Unmodified estado . Para actualizar los miembros de una colección secundaria, debe llamar Attach explícitamente a esa entidad y especificarla.

Attach asocia todas las entidades del gráfico de objetos del objeto proporcionado. Por ejemplo:

using (var db = new SampleDataContext())
{  
    var employee = new Employee { employeeId = 1 };  

    var master = new Master();  
    master.Employee = employee;  

    var child = new Child();  
    child.Employee = employee;  

    db.Employees.Attach(employee);  

    master.Child = child;  

    db.Masters.InsertOnSubmit(master);  

    db.SubmitChanges();  
} 

Al llamar Attach a on Employee attaches employee, master, and child, because the Employee has relationships to both master and child. Debe llamar InsertOnSubmit explícitamente para cambiar el estado de adjunto a insertado.

Attach(TEntity)

Adjunta una entidad desconectada o "separada" a un nuevo objeto DataContext cuando se requieren los valores originales para las comprobaciones de simultaneidad optimista.

public void Attach (TEntity entity);

Parámetros

entity
TEntity

Valores originales de la entidad que se va a asociar.

Implementaciones

Comentarios

Use los Attach métodos con entidades que se han creado en un DataContext, serializado en un cliente y, a continuación, deserializado de nuevo para realizar una operación de actualización o eliminación. Dado que el nuevo DataContext no tiene ninguna manera de realizar un seguimiento de los valores originales de una entidad desconectada, el cliente es responsable de proporcionar esos valores. En esta versión de Attach, se supone que la entidad está en su estado de valor original. Después de llamar a este método, puede actualizar sus campos, por ejemplo, con datos adicionales enviados desde el cliente.

Cuando se adjunta una nueva entidad, se inicializan los cargadores diferidos de las colecciones secundarias (por ejemplo, EntitySet las colecciones de entidades de las tablas asociadas). Cuando SubmitChanges se llama a , los miembros de las colecciones secundarias se colocan en un Unmodified estado . Para actualizar los miembros de una colección secundaria, debe llamar Attach explícitamente a esa entidad y especificarla.

Para obtener más información, consulta Recuperación de datos y operaciones CUD en aplicaciones de N niveles (LINQ to SQL).

No intente una Attach entidad que no se haya desasociado mediante la serialización. Las entidades que no se han serializado siguen manteniendo asociaciones con cargadores diferidos que pueden provocar resultados inesperados si un segundo contexto de datos realiza un seguimiento de la entidad.

Se aplica a

.NET Framework 4.8.1 y otras versiones
Producto Versiones
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Attach(TEntity, Boolean)

Adjunta una entidad a DataContext en un estado modificado o no modificado.

public void Attach (TEntity entity, bool asModified);

Parámetros

entity
TEntity

Entidad que se va a asociar.

asModified
Boolean

true para adjuntar la entidad como modificada; false para adjuntar la entidad como sin modificar.

Comentarios

Si se adjunta como modificado, la entidad debe declarar un miembro de versión o no debe participar en la comprobación de conflictos de actualización. Cuando se adjunta una nueva entidad, se inicializan los cargadores diferidos de las colecciones secundarias (por ejemplo, EntitySet las colecciones de entidades de las tablas asociadas). Cuando SubmitChanges se llama a , los miembros de las colecciones secundarias se colocan en un Unmodified estado . Para actualizar los miembros de una colección secundaria, debe llamar Attach explícitamente a esa entidad y especificarla.

Se aplica a

.NET Framework 4.8.1 y otras versiones
Producto Versiones
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Attach(TEntity, TEntity)

Adjunta una entidad a DataContext en un estado modificado o no modificado especificando la entidad y su estado original.

public void Attach (TEntity entity, TEntity original);

Parámetros

entity
TEntity

Entidad que se va a asociar.

original
TEntity

Instancia del mismo tipo de entidad con miembros de datos que contienen los valores originales.

Ejemplos

using (Northwnd db2 = new Northwnd(@"c:\northwnd.mdf"))
{
    Customer Cust_File = new Customer();
    string xmlFile = "";

    // Get the original object from the deserializer.
    Customer c = SerializeHelper.Deserialize<Customer>
        (xmlFile, Cust_File);

    // Set all the desired properties to the entity to be attached.
    Customer c_updated = new Customer() { CustomerID = c.CustomerID,
        Phone = "425-123-4567", CompanyName = "Microsoft" };
    db2.Customers.Attach(c_updated, c);

    // Perform last minute updates, which will still take effect.
    c_updated.Phone = "425-765-4321";

    // SubmitChanges()sets the phoneNumber and CompanyName of
    // customer with customerID=Cust. to "425-765-4321" and
    // "Microsoft" respectively.
    db2.SubmitChanges();
}

Comentarios

En el ejemplo siguiente, el Customer objeto ya está configurado correctamente. Puede llamar Attach a sin tener que reproducir las actualizaciones.

Cuando se adjunta una nueva entidad, se inicializan los cargadores diferidos de las colecciones secundarias (por ejemplo, EntitySet las colecciones de entidades de las tablas asociadas). Cuando SubmitChanges se llama a , los miembros de las colecciones secundarias se colocan en un Unmodified estado . Para actualizar los miembros de una colección secundaria, debe llamar Attach explícitamente a esa entidad y especificarla.

Se aplica a

.NET Framework 4.8.1 y otras versiones
Producto Versiones
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1