Table<TEntity>.Attach Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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();
}
Using db As New SampleDataContext()
Dim employee As New Employee With { .employeeId = 1 }
Dim master As New Master()
master.Employee = employee
Dim child As New Child()
child.Employee = employee
db.Employees.Attach(employee)
master.Child = child
db.Masters.InsertOnSubmit(master)
db.SubmitChanges()
End Using
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);
public:
virtual void Attach(TEntity entity);
public void Attach (TEntity entity);
member this.Attach : 'Entity -> unit
abstract member Attach : 'Entity -> unit
override this.Attach : 'Entity -> unit
Public Sub Attach (entity As TEntity)
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
Attach(TEntity, Boolean)
Adjunta una entidad a DataContext en un estado modificado o no modificado.
public:
void Attach(TEntity entity, bool asModified);
public void Attach (TEntity entity, bool asModified);
member this.Attach : 'Entity * bool -> unit
Public Sub Attach (entity As TEntity, asModified As Boolean)
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
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);
public void Attach (TEntity entity, TEntity original);
member this.Attach : 'Entity * 'Entity -> unit
Public Sub Attach (entity As TEntity, original As TEntity)
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();
}
Using db = New Northwnd("...")
Dim Cust_File As New Customer()
Dim xmlFile As String = ""
'Get the original object from the deserializer.
Dim c As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFile, Cust_File)
' Set all the desired properties to the entity to be attached.
Dim c_updated As New Customer With {.CustomerID = c.CustomerID, _
.Phone = "425-123-4567", .CompanyName = "Microsoft"}
db.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.
db.SubmitChanges()
End Using
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.