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í
| Name | Description |
|---|---|
| Attach(TEntity) |
Připojí odpojenou nebo odpojenou entitu k nové DataContext , pokud jsou pro kontroly optimistické souběžnosti vyžadovány původní hodnoty. |
| Attach(TEntity, Boolean) |
Připojí entitu DataContext k upravenému nebo nemodifikovanému stavu. |
| Attach(TEntity, TEntity) |
Připojí entitu DataContext k upravenému nebo nemodifikovanému stavu zadáním entity i jejího původního stavu. |
Poznámky
Attach Použijte metody s entitami, které byly vytvořeny v jednom DataContext, serializován na klienta, a poté deserializován zpět (s úmyslem provést aktualizaci nebo odstranění operace). Další informace naleznete v tématu Načítání dat a operace CUD v N-vrstvých aplikacích (LINQ to SQL).
Nepokoušejte se entitu Attach , 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é můžou způsobit neočekávané výsledky, pokud se entita bude sledovat pomocí druhého kontextu dat.
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.
Attach připojí všechny entity v grafu objektu 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řipojení zaměstnance, hlavního a podřízeného, protože Employee má vztahy s hlavním i podřízeným. Je nutné explicitně volat InsertOnSubmit , abyste změnili stav z připojeného na vložený.
Attach(TEntity)
Připojí odpojenou nebo odpojenou entitu k nové DataContext , pokud jsou pro kontroly optimistické souběžnosti vyžadovány 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á se má připojit.
Implementuje
Poznámky
Attach Použijte metody s entitami, které byly vytvořeny v jednom DataContext, serializovány na 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, jaké původní hodnoty byly pro odpojenou entitu, je klient zodpovědný za poskytnutí těchto hodnot. V této verzi Attachse předpokládá, že entita je v původním stavu hodnoty. Po volání této metody můžete aktualizovat její pole, například s dalšími daty odeslanými z klienta.
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).
Nepokoušejte se entitu Attach , 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é můžou způsobit neočekávané výsledky, pokud se entita bude sledovat pomocí druhého kontextu dat.
Platí pro
Attach(TEntity, Boolean)
Připojí entitu DataContext k upravenému nebo nemodifikovanému 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 podle změny; false a připojte entitu jako neupravenou.
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.
Platí pro
Attach(TEntity, TEntity)
Připojí entitu DataContext k upravenému nebo nemodifikovanému stavu zadáním entity i jejího původního stavu.
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 znovu přehrávat aktualizace.
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.