Table<TEntity>.Attach 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將實體附加至 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
並指定該實體。