Table<TEntity>.Attach 方法

定義

將實體附加至 DataContext

多載

Attach(TEntity)

當開放式並行存取檢查需要原始值時,將中斷連接的實體附加至新的 DataContext

Attach(TEntity, Boolean)

以已修改或未修改的狀態,將實體附加至 DataContext

Attach(TEntity, TEntity)

透過指定實體及其原始狀態,將實體附加至已修改或未修改狀態中的 DataContext

備註

使用 Attach 方法搭配已在一個 DataContext 中建立的實體,序列化至用戶端,然後還原序列化回 (,並意圖執行更新或刪除作業) 。 如需詳細資訊,請參閱多層式應用程式中的資料擷取和 CUD 作業 (LINQ to SQL)

請勿嘗試 Attach 未透過序列化中斷連結的實體。 尚未序列化的實體仍會維持與延後載入器的關聯,如果實體被第二個數據內容追蹤,可能會導致非預期的結果。

附加新實體時,任何子集合的延後載入器 (例如, EntitySet 會初始化相關聯資料表中的實體集合) 。 呼叫 時 SubmitChanges ,子集合的成員會進入 Unmodified 狀態。 若要更新子集合的成員,您必須明確呼叫 Attach 並指定該實體。

Attach 附加所提供物件之物件圖形中的所有實體。 例如:

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  

上的 Employee 呼叫 Attach 會附加員工、主要和子系,因為 與 Employee 主要和子系具有關聯性。 您必須明確呼叫 InsertOnSubmit ,將狀態從附加變更為插入。

Attach(TEntity)

當開放式並行存取檢查需要原始值時,將中斷連接的實體附加至新的 DataContext

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)

參數

entity
TEntity

要附加之實體的原始值。

實作

備註

使用 Attach 方法搭配已在一個 DataContext 中建立的實體,序列化至用戶端,然後還原序列化以執行更新或刪除作業。 因為新的 DataContext 無法追蹤已中斷連線實體的原始值,所以用戶端會負責提供這些值。 在此版本的 Attach 中,假設實體處於其原始值狀態。 呼叫此方法之後,您就可以更新其欄位,例如,使用從用戶端傳送的其他資料。

附加新實體時,任何子集合的延後載入器 (例如, EntitySet 會初始化相關聯資料表中的實體集合) 。 呼叫 時 SubmitChanges ,子集合的成員會進入 Unmodified 狀態。 若要更新子集合的成員,您必須明確呼叫 Attach 並指定該實體。

如需詳細資訊,請參閱多層式應用程式中的資料擷取和 CUD 作業 (LINQ to SQL)

請勿嘗試 Attach 未透過序列化中斷連結的實體。 尚未序列化的實體仍會維持與延後載入器的關聯,如果實體被第二個數據內容追蹤,可能會導致非預期的結果。

適用於

Attach(TEntity, Boolean)

以已修改或未修改的狀態,將實體附加至 DataContext

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)

參數

entity
TEntity

要附加的實體。

asModified
Boolean

true 表示以修改的方式附加實體,false 表示以未修改的方式附加實體。

備註

如果附加 為已修改,實體必須宣告版本成員,或不得參與更新衝突檢查。 附加新實體時,任何子集合的延後載入器 (例如, EntitySet 會初始化相關聯資料表中的實體集合) 。 呼叫 時 SubmitChanges ,子集合的成員會進入 Unmodified 狀態。 若要更新子集合的成員,您必須明確呼叫 Attach 並指定該實體。

適用於

Attach(TEntity, TEntity)

透過指定實體及其原始狀態,將實體附加至已修改或未修改狀態中的 DataContext

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)

參數

entity
TEntity

要附加的實體。

original
TEntity

相同實體型別的執行個體,其具有包含原始值的資料成員。

範例

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

備註

在下列範例中 Customer ,物件已經正確設定。 您可以呼叫 Attach ,而不需要重新執行更新。

附加新實體時,任何子集合的延後載入器 (例如, EntitySet 會初始化相關聯資料表中的實體集合) 。 呼叫 時 SubmitChanges ,子集合的成員會進入 Unmodified 狀態。 若要更新子集合的成員,您必須明確呼叫 Attach 並指定該實體。

適用於