Compartir vía


Table<TEntity>.AttachAll Método

Definición

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.

Se aplica a