在物件服務中管理交易 (Entity Framework)
物件服務可支援自動交易的登記。這表示在物件內容中執行的活動 (例如執行查詢,並將資料的變更儲存在資料來源中) 可以在資料來源中隔離,其方式是在 System.Transactions 交易內執行此作業。交易會搭配物件服務一起使用來執行以下作業:
若要針對必須高度一致的資料來源執行多項作業,例如依賴物件變更成功完成的查詢。
若要讓物件內容中的變更與其他分散式作業協調,例如傳送電子郵件通知或寫入訊息佇列。
需要登記其他資源管理員的交易稱為「分散式交易」(Distributed Transaction)。分散式交易會使用分散式交易協調器 (DTC) 來管理完成交易所需的資源。將交易提升至 DTC 時,可能需要耗費相當大的成本才能建立及完成。某些資源管理員 (如 SQL Server 2005) 可支援單一階段登記 (Promotable Single Phase Enlistment,PSPE) 交易通訊協定。如此可讓資源管理員裝載一個可於稍後提升的交易,以便在必要時由分散式交易協調器 (DTC) 管理它。
如需詳細資訊,請參閱 MSDN Library 中的交易處理。
下列考量適用於當您搭配物件服務使用交易時:
只交易針對資料來源的作業。對物件內容中之物件所做的變更則不會交易。對物件內容中之物件所做的變更可在交易範圍的外面看到。
當您呼叫 SaveChanges 時,如果目前的交易存在,物件服務就會將這個交易用於針對資料來源進行的作業。否則,它會針對此作業建立新的交易。您可以使用 EntityTransaction、Transaction 或 TransactionScope 定義交易。
附註 若要登記現有的交易,物件服務可能會關閉並重新開啟連接。
當物件服務針對 SaveChanges 作業建立新的交易時,要等到交易完成之後,才可接受物件內容中物件的變更。如此可確保物件內容的狀態及資料來源是一致的。
當您打算重試交易中的作業時,您必須確定交易完成之前並未重設物件內容中的物件狀態。若要這樣做,您必須呼叫 SaveChanges (包含 acceptChangesDuringSave 參數的 false 值),然後只有在交易中的其他作業成功完成之後,才能呼叫 AcceptAllChanges。如需詳細資訊,請參閱 HOW TO:管理物件服務交易 (Entity Framework)。
在協調交易的重試作業當中,您可能第二次呼叫 SaveChanges 但是未先呼叫 AcceptAllChanges。在此情況下,物件服務會嘗試將相同的變更重新套用到資料來源。
另請參閱
概念
Entity Framework 的 EntityClient 提供者
在物件服務中管理連接 (Entity Framework)