Table<TEntity>.AttachAll Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.