Sdílet prostřednictvím


Table<TEntity>.Attach Metoda

Definice

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.

Platí pro