Table<TEntity>.AttachAll 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í.
Asocia todas las entidades de una colección al objeto DataContext en un estado modificado o no modificado.
Sobrecargas
AttachAll<TSubEntity>(IEnumerable<TSubEntity>) |
Asocia todas las entidades de una colección al objeto DataContext en un estado modificado o no modificado. |
AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean) |
Asocia todas las entidades de una colección al objeto DataContext en un estado modificado o no modificado. |
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.
Para obtener más información, consulta Recuperación de datos y operaciones CUD en aplicaciones de N niveles (LINQ to SQL).
AttachAll<TSubEntity>(IEnumerable<TSubEntity>)
Asocia todas las entidades de una colección al objeto DataContext en un estado modificado o no modificado.
public:
generic <typename TSubEntity>
where TSubEntity : TEntity void AttachAll(System::Collections::Generic::IEnumerable<TSubEntity> ^ entities);
public void AttachAll<TSubEntity> (System.Collections.Generic.IEnumerable<TSubEntity> entities) where TSubEntity : TEntity;
member this.AttachAll : seq<#'Entity> -> unit
Public Sub AttachAll(Of TSubEntity As TEntity) (entities As IEnumerable(Of TSubEntity))
Parámetros de tipo
- TSubEntity
Tipo de entidades que van a asociarse.
Parámetros
- entities
- IEnumerable<TSubEntity>
Colección de entidades.
Comentarios
Este método asocia todas las entidades de una colección a un nuevo DataContext. 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).
Se aplica a
AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean)
Asocia todas las entidades de una colección al objeto DataContext en un estado modificado o no modificado.
public:
generic <typename TSubEntity>
where TSubEntity : TEntity void AttachAll(System::Collections::Generic::IEnumerable<TSubEntity> ^ entities, bool asModified);
public void AttachAll<TSubEntity> (System.Collections.Generic.IEnumerable<TSubEntity> entities, bool asModified) where TSubEntity : TEntity;
member this.AttachAll : seq<#'Entity> * bool -> unit
Public Sub AttachAll(Of TSubEntity As TEntity) (entities As IEnumerable(Of TSubEntity), asModified As Boolean)
Parámetros de tipo
- TSubEntity
Tipo de entidades que van a asociarse.
Parámetros
- entities
- IEnumerable<TSubEntity>
Colección de entidades.
- asModified
- Boolean
Es true
si el objeto tiene una marca de tiempo o un miembro RowVersion; es false
si se usan los valores originales para la comprobación de simultaneidad optimista.
Ejemplos
En el ejemplo siguiente se muestra cómo se puede actualizar un Order
objeto en una instancia diferente DataContext . En el ejemplo se supone que tiene una conexión a una base de datos y se ha realizado un archivo LINQ to SQL para ella (en este caso, la base de datos de ejemplo Northwind).
using (Northwnd db = new Northwnd(@"c:\northwnd.mdf"))
{
// Get original Customer from deserialization.
var q1 = db.Orders.First();
string serializedQ = SerializeHelper.Serialize(q1);
var q2 = SerializeHelper.Deserialize(serializedQ, q1);
// Track this object for an update (not insert).
db.Orders.Attach(q2, false);
// Replay the changes.
q2.ShipRegion = "King";
q2.ShipAddress = "1 Microsoft Way";
// DataContext knows how to update the order.
db.SubmitChanges();
}
Using db As New Northwnd("")
' Get original Customer from deserialization.
Dim q1 = db.Orders.First()
Dim serializedQ As String = SerializeHelper.Serialize(q1)
Dim q2 = SerializeHelper.Deserialize(serializedQ, q1)
' Track this object for an update (not insert).
db.Orders.Attach(q2, False)
' Replay the changes.
q2.ShipRegion = "King"
q2.ShipAddress = "1 Microsoft Way"
' DataContext knows how to update the order.
db.SubmitChanges()
End Using
En el ejemplo siguiente, un objeto de entidad que se va a adjuntar tiene una relación de clave externa con otro objeto y se almacena en la memoria caché, pero no está asociada. Cuando se llama a SubmitChanges, ChangeProcessor
agrega una Insert
operación para todos los objetos de clave externa. Se trata de un efecto secundario cuando se vuelve a usar una instancia de entidad en una instancia diferente DataContext . Por este motivo, LINQ to SQL no admite la reutilización de objetos.
Customer c = null;
using (Northwnd db = new Northwnd(""))
{
/* Get both the customer c and the customer's order
into the cache. */
c = db.Customers.First();
string sc = c.Orders.First().ShipCity;
}
using (Northwnd nw2 = new Northwnd(""))
{
// Attach customers and update the address.
nw2.Customers.Attach(c, false);
c.Address = "new";
nw2.Log = Console.Out;
/* At SubmitChanges, you will see INSERT requests for all
Customer c’s orders. */
nw2.SubmitChanges();
}
Sub method7()
Dim c As Customer = Nothing
Using db = New Northwnd("...")
' Get both the customer c and the customer's order
' into the cache.
c = db.Customers.First()
Dim sc = c.Orders.First().ShipCity
End Using
Using nw2 = New Northwnd("...")
' Attach customers and update the address.
nw2.Customers.Attach(c, False)
c.Address = "new"
nw2.Log = Console.Out
' At SubmitChanges, you will see INSERT requests for all
' c's orders.
nw2.SubmitChanges()
End Using
En el ejemplo siguiente se muestra un escenario en el que el cliente A ha cancelado todos los pedidos y el cliente B ha tomado posesión de ellos. Puede adjuntar todos los pedidos del Cliente A al mismo tiempo.
Customer CustA_File = new Customer();
Customer CustB_File = new Customer();
string xmlFileA = "";
string xmlFileB = "";
// Get the serialized objects.
Customer A = SerializeHelper.Deserialize<Customer>(xmlFileA, CustA_File);
Customer B = SerializeHelper.Deserialize<Customer>(xmlFileB, CustB_File);
List<Order> AOrders = A.Orders.ToList();
using (Northwnd db = new Northwnd(@"c:\northwnd.mdf"))
{
//Attach all the orders belonging to Customer A all at once.
db.Orders.AttachAll(AOrders, false);
// Update the orders belonging to Customer A to show them
// as owned by Customer B.
foreach (Order o in AOrders)
{
o.CustomerID = B.CustomerID;
}
// DataContext can now apply the change of ownership to
// the database.
db.SubmitChanges();
}
Dim custA_File = New Customer()
Dim custB_File = New Customer()
Dim xmlFileA As String = ""
Dim xmlFileB As String = ""
' Get the serialized objects.
Dim A As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFileA, custA_File)
Dim B As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFileB, custB_File)
Dim AOrders As List(Of Order) = A.Orders.ToList()
Using db As New Northwnd("...")
'Attach all the orders belonging to Customer A all at once.
db.Orders.AttachAll(AOrders, False)
' Update the orders belonging to Customer A to show them
' as owned by Customer B
For Each o In AOrders
o.CustomerID = B.CustomerID
Next
' DataContext can now apply the change of ownership to
'the database
db.SubmitChanges()
End Using
Comentarios
Este método asocia todas las entidades de una colección a DataContext en un estado modificado o sin modificar . 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. Si se adjunta como sin modificar, se supone que la entidad representa el valor original. Después de llamar a este método, los campos de la entidad se pueden modificar con otra información del cliente antes SubmitChanges de llamar a . Para obtener más información, consulta Recuperación de datos y operaciones CUD en aplicaciones de N niveles (LINQ to SQL).
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.