Jazyk

Table<TEntity>.AttachAll Metoda

Definice

Připojí všechny entity kolekce k DataContext upravenému nebo nemodifikovanému stavu.

Přetížení

Name Description
AttachAll<TSubEntity>(IEnumerable<TSubEntity>)

Připojí všechny entity kolekce k DataContext upravenému nebo nemodifikovanému stavu.

AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean)

Připojí všechny entity kolekce k DataContext upravenému nebo nemodifikovanému stavu.

Poznámky

Pokud je entita připojování upravená, musí buď deklarovat člena verze, nebo se nesmí účastnit kontroly konfliktů aktualizací.

Při připojení nové entity se inicializují odložené zavaděče pro všechny podřízené kolekce (například EntitySet kolekce entit z přidružených tabulek). Při SubmitChanges zavolání se členové podřízených kolekcí zadají do Unmodified stavu. Chcete-li aktualizovat členy podřízené kolekce, musíte explicitně zavolat Attach a zadat tuto entitu.

Další informace naleznete v tématu Načítání dat a operace CUD v N-vrstvých aplikacích (LINQ to SQL).

AttachAll<TSubEntity>(IEnumerable<TSubEntity>)

Připojí všechny entity kolekce k DataContext upravenému nebo nemodifikovanému stavu.

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))

Parametry typu

TSubEntity

Typ entit, které se mají připojit.

Parametry

entities
IEnumerable<TSubEntity>

Kolekce entit.

Poznámky

Tato metoda připojí všechny entity kolekce k nové DataContext. Při připojení nové entity se inicializují odložené zavaděče pro všechny podřízené kolekce (například EntitySet kolekce entit z přidružených tabulek). Při SubmitChanges zavolání se členové podřízených kolekcí zadají do Unmodified stavu. Chcete-li aktualizovat členy podřízené kolekce, musíte explicitně zavolat Attach a zadat tuto entitu.

Další informace naleznete v tématu Načítání dat a operace CUD v N-vrstvých aplikacích (LINQ to SQL).

Platí pro

AttachAll<TSubEntity>(IEnumerable<TSubEntity>, Boolean)

Připojí všechny entity kolekce k DataContext upravenému nebo nemodifikovanému stavu.

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)

Parametry typu

TSubEntity

Typ entit, které se mají připojit.

Parametry

entities
IEnumerable<TSubEntity>

Kolekce entit.

asModified
Boolean

true pokud má objekt časové razítko nebo RowVersion člen; false pokud se pro kontrolu optimistické souběžnosti používají původní hodnoty.

Příklady

Následující příklad ukazuje, jak můžete aktualizovat Order objekt v jiné DataContext instanci. Příklad předpokládá, že máte připojení k databázi a vytvořili pro něj LINQ to SQL (v tomto případě ukázkovou databázi 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

V následujícím příkladu má objekt entity, který se má připojit, vztah cizího klíče s jiným objektem a je uložen v mezipaměti, ale není připojen. Při volání SubmitChangespřidá ChangeProcessorInsert operaci pro všechny objekty cizího klíče. Jedná se o vedlejší účinek, když se instance entity znovu použije v jiné DataContext instanci. Z tohoto důvodu LINQ to SQL nepodporuje opakované použití objektů.

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

Následující příklad ukazuje scénář, ve kterém zákazník A zrušil všechny objednávky a zákazník B převzal vlastnictví. Všechny objednávky zákazníka A můžete připojit současně.

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

Poznámky

Tato metoda připojí všechny entity kolekce k DataContextupravenému nebo nemodifikovanému stavu. Pokud je entita připojování upravená, musí buď deklarovat člena verze, nebo se nesmí účastnit kontroly konfliktů aktualizací. Pokud se připojí jako neupravené, předpokládá se, že entita představuje původní hodnotu. Po volání této metody je možné pole entity upravit s dalšími informacemi z klienta před SubmitChanges voláním. Další informace naleznete v tématu Načítání dat a operace CUD v N-vrstvých aplikacích (LINQ to SQL).

Při připojení nové entity se inicializují odložené zavaděče pro všechny podřízené kolekce (například EntitySet kolekce entit z přidružených tabulek). Při SubmitChanges zavolání se členové podřízených kolekcí zadají do Unmodified stavu. Chcete-li aktualizovat členy podřízené kolekce, musíte explicitně zavolat Attach a zadat tuto entitu.

Platí pro