Sdílet prostřednictvím


Table<TEntity>.AttachAll Metoda

Definice

Připojí všechny entity kolekce k objektu DataContext v upraveném nebo nezměněném stavu.

Přetížení

AttachAll<TSubEntity>(IEnumerable<TSubEntity>)

Připojí všechny entity kolekce k objektu DataContext v upraveném nebo nezměněném stavu.

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

Připojí všechny entity kolekce k objektu DataContext v upraveném nebo nezměněném stavu.

Poznámky

Pokud je připojení změněno, musí entita deklarovat člena verze nebo se nesmí účastnit kontroly konfliktu aktualizací.

Když je připojena nová entita, inicializují se 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í jsou členové podřízených kolekcí uvedeni do Unmodified stavu. Pokud chcete aktualizovat členy podřízené kolekce, musíte tuto entitu explicitně volat Attach a zadat.

Další informace najdete v tématu Operace načítání dat a cud v n-vrstvých aplikacích (LINQ to SQL).

AttachAll<TSubEntity>(IEnumerable<TSubEntity>)

Připojí všechny entity kolekce k objektu DataContext v upraveném nebo nezměněném 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. Když je připojena nová entita, inicializují se 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í jsou členové podřízených kolekcí uvedeni do Unmodified stavu. Pokud chcete aktualizovat členy podřízené kolekce, musíte tuto entitu explicitně volat Attach a zadat.

Další informace najdete v tématu Operace načítání dat a cud v n-vrstvých aplikacích (LINQ to SQL).

Platí pro

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

Připojí všechny entity kolekce k objektu DataContext v upraveném nebo nezměněném 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 objekt má č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 jste pro ni LINQ to SQL soubor (v tomto případě ukázková databáze 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í SubmitChangesobjektu ChangeProcessor přidá Insert operaci pro všechny objekty cizího klíče. Jedná se o vedlejší efekt, 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 jejich vlastnictví. Všechny objednávky zákazníka A můžete připojit najednou.

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 objektu DataContext v upraveném nebo nezměněném stavu. Pokud je připojení změněno, musí entita deklarovat člena verze nebo se nesmí účastnit kontroly konfliktu aktualizací. Pokud se připojení jako neupravuje, 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 najdete v tématu Operace načítání dat a cud v n-vrstvých aplikacích (LINQ to SQL).

Když je připojena nová entita, inicializují se 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í jsou členové podřízených kolekcí uvedeni do Unmodified stavu. Pokud chcete aktualizovat členy podřízené kolekce, musíte tuto entitu explicitně volat Attach a zadat.

Platí pro