Table<TEntity>.Attach 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í entitu k objektu DataContext.
Přetížení
Attach(TEntity) |
Připojí odpojenou nebo "odpojenou" entitu k nové DataContext , pokud se pro optimistické kontroly souběžnosti vyžadují původní hodnoty. |
Attach(TEntity, Boolean) |
Připojí entitu k entitě DataContext v upraveném nebo nezměněném stavu. |
Attach(TEntity, TEntity) |
Připojí entitu k entitě DataContext v upraveném nebo nezměněném stavu tak, že určí entitu i její původní stav. |
Poznámky
Attach
Použijte metody s entitami, které byly vytvořeny v jednom DataContext, serializovány do klienta a pak deserializovány zpět (se záměrem provést operaci aktualizace nebo odstranění). Další informace najdete v tématu Operace načítání dat a cud v n-vrstvých aplikacích (LINQ to SQL).
Nepokoušejte se o Attach
entitu, která nebyla odpojena prostřednictvím serializace. Entity, které nebyly serializovány, stále udržují přidružení s odloženými zavaděči, které mohou způsobit neočekávané výsledky, pokud je entita sledována druhým kontextem dat.
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.
Attach
připojí všechny entity v grafu objektů poskytnutého objektu. Příklad:
using (var db = new SampleDataContext())
{
var employee = new Employee { employeeId = 1 };
var master = new Master();
master.Employee = employee;
var child = new Child();
child.Employee = employee;
db.Employees.Attach(employee);
master.Child = child;
db.Masters.InsertOnSubmit(master);
db.SubmitChanges();
}
Using db As New SampleDataContext()
Dim employee As New Employee With { .employeeId = 1 }
Dim master As New Master()
master.Employee = employee
Dim child As New Child()
child.Employee = employee
db.Employees.Attach(employee)
master.Child = child
db.Masters.InsertOnSubmit(master)
db.SubmitChanges()
End Using
Volání Attach
na Employee
připojí zaměstnance, hlavního a podřízeného Employee
, protože má vztahy s hlavním i podřízeným. Pokud chcete změnit stav z připojeného na vložený, musíte explicitně volat InsertOnSubmit
.
Attach(TEntity)
Připojí odpojenou nebo "odpojenou" entitu k nové DataContext , pokud se pro optimistické kontroly souběžnosti vyžadují původní hodnoty.
public:
void Attach(TEntity entity);
public:
virtual void Attach(TEntity entity);
public void Attach (TEntity entity);
member this.Attach : 'Entity -> unit
abstract member Attach : 'Entity -> unit
override this.Attach : 'Entity -> unit
Public Sub Attach (entity As TEntity)
Parametry
- entity
- TEntity
Původní hodnoty entity, která má být připojena.
Implementuje
Poznámky
Attach
Použijte metody s entitami, které byly vytvořeny v jednom DataContext, serializovány do klienta a pak deserializovány zpět k provedení operace aktualizace nebo odstranění. Vzhledem k tomu, že nový DataContext nemá žádný způsob, jak sledovat původní hodnoty pro odpojenou entitu, je klient zodpovědný za zadání těchto hodnot. V této verzi se Attachpředpokládá, že entita je ve stavu původní hodnoty. Po volání této metody pak můžete aktualizovat její pole, například dalšími daty odeslanými z klienta.
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).
Nepokoušejte se o Attach
entitu, která nebyla odpojena prostřednictvím serializace. Entity, které nebyly serializovány, stále udržují přidružení s odloženými zavaděči, které mohou způsobit neočekávané výsledky, pokud je entita sledována druhým kontextem dat.
Platí pro
Attach(TEntity, Boolean)
Připojí entitu k entitě DataContext v upraveném nebo nezměněném stavu.
public:
void Attach(TEntity entity, bool asModified);
public void Attach (TEntity entity, bool asModified);
member this.Attach : 'Entity * bool -> unit
Public Sub Attach (entity As TEntity, asModified As Boolean)
Parametry
- entity
- TEntity
Entita, která se má připojit.
- asModified
- Boolean
true
připojit entitu v upraveném znění; false
a připojte entitu jako nezměněnou.
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.
Platí pro
Attach(TEntity, TEntity)
Připojí entitu k entitě DataContext v upraveném nebo nezměněném stavu tak, že určí entitu i její původní stav.
public:
void Attach(TEntity entity, TEntity original);
public void Attach (TEntity entity, TEntity original);
member this.Attach : 'Entity * 'Entity -> unit
Public Sub Attach (entity As TEntity, original As TEntity)
Parametry
- entity
- TEntity
Entita, která se má připojit.
- original
- TEntity
Instance stejného typu entity s datovými členy, které obsahují původní hodnoty.
Příklady
using (Northwnd db2 = new Northwnd(@"c:\northwnd.mdf"))
{
Customer Cust_File = new Customer();
string xmlFile = "";
// Get the original object from the deserializer.
Customer c = SerializeHelper.Deserialize<Customer>
(xmlFile, Cust_File);
// Set all the desired properties to the entity to be attached.
Customer c_updated = new Customer() { CustomerID = c.CustomerID,
Phone = "425-123-4567", CompanyName = "Microsoft" };
db2.Customers.Attach(c_updated, c);
// Perform last minute updates, which will still take effect.
c_updated.Phone = "425-765-4321";
// SubmitChanges()sets the phoneNumber and CompanyName of
// customer with customerID=Cust. to "425-765-4321" and
// "Microsoft" respectively.
db2.SubmitChanges();
}
Using db = New Northwnd("...")
Dim Cust_File As New Customer()
Dim xmlFile As String = ""
'Get the original object from the deserializer.
Dim c As Customer = SerializeHelper.Deserialize(Of Customer)(xmlFile, Cust_File)
' Set all the desired properties to the entity to be attached.
Dim c_updated As New Customer With {.CustomerID = c.CustomerID, _
.Phone = "425-123-4567", .CompanyName = "Microsoft"}
db.Customers.Attach(c_updated, c)
' Perform last minute updates, which will still take effect.
c_updated.Phone = "425-765-4321"
' SubmitChanges()sets the phoneNumber and CompanyName of
' customer with customerID=Cust. to "425-765-4321" and
' "Microsoft" respectively.
db.SubmitChanges()
End Using
Poznámky
V následujícím příkladu Customer
je objekt již správně nakonfigurovaný. Můžete volat Attach
, aniž byste museli přehrávat aktualizace.
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.