在物件服務中管理連接 (Entity Framework)
根據預設,物件服務會管理與資料庫的連接。它只會在必要時開啟連接,例如,為了執行查詢或呼叫 SaveChanges。然後物件服務會在此作業完成時關閉連接。
呼叫以下任何一個方法會開啟連接:
ObjectContext 的 SaveChanges 或 Refresh。
FirstOrDefault,或 ObjectQuery 上的 First。
EntityCollection 上的 Load。
EntityReference 上的 Load。
任何 Language-Integrated Query (LINQ) 方法或 ObjectQuery 查詢產生器方法,例如 Where、OrderBy 或 Select。
附註 當呼叫查詢方法時,此連接便會開啟,而且在完全使用或處置 ObjectResult 之前,此連接都會維持開啟狀態。
物件服務會透過 Connection 屬性公開 EntityConnection。如此可讓您管理連接和交易,或是提供自己的 EntityConnection。當您想要將連接保留在短期的物件內容中,以改善效能或是明確控制交易時,這樣的作法會很實用。實體架構 所使用的相同提供者連接可以與應用程式的其他部分共用。
下列考量適用於管理連接時:
如果在作業開始之前尚未開啟連接,物件內容將會開啟連接。如果物件內容在作業期間開啟連接,它一定會在作業完成時關閉連接。
如果物件內容建立連接,則當處置物件內容時,一定會處置此連接。
在長時間執行的物件內容中,您必須確定當物件內容不再需要時,要將它處置。
如果您為物件內容提供 EntityConnection,您必須確定它已處置。
下列範例示範如何明確開啟連接:
' Explicitly open the connection.
advWorksContext.Connection.Open()
// Explicitly open the connection.
advWorksContext.Connection.Open();
如需詳細資訊,請參閱 HOW TO:從物件內容手動開啟連接 (Entity Framework)。
當您在長時間執行的物件內容中手動開啟連接時,您必須呼叫 Dispose,以確定當不再需要物件內容時會關閉連接。您也可以在 EntityConnection 上呼叫 Close 來明確關閉連接。如需詳細資訊,請參閱 HOW TO:在長時間執行的物件內容中管理連接 (Entity Framework)。
物件服務也可讓您建立 EntityConnection,並提供與物件內容的這個連接。在此情況下,您可以手動開啟連接,或是在需要時允許物件內容開啟連接。當您為物件內容提供 EntityConnection 時,您必須確定當物件內容和 EntityConnection 不再需要時會加以處置。下列範例會建立連接,並將它傳遞給物件內容:
' Create an EntityConnection.
Dim conn As New EntityConnection("name=AdventureWorksEntities")
' Create a long-running context with the connection.
Dim advWorksContext As New AdventureWorksEntities(conn)
// Create an EntityConnection.
EntityConnection conn =
new EntityConnection("name=AdventureWorksEntities");
// Create a long-running context with the connection.
AdventureWorksEntities advWorksContext =
new AdventureWorksEntities(conn);
如需詳細資訊,請參閱 HOW TO:使用 EntityConnection 搭配物件內容 (Entity Framework)。