管理对象服务中的连接(实体框架)
默认情况下,对象服务管理与数据库的连接。它仅在必要时打开连接,例如在执行查询或调用 SaveChanges 时。对象服务随后会在操作完成后关闭连接。
调用以下任一方法都会打开连接:
ObjectContext 上的 SaveChanges 或 Refresh。
ObjectQuery 上的 FirstOrDefault 或 First。
EntityCollection 上的 Load。
EntityReference 上的 Load。
任何语言集成查询 (LINQ) 方法或 ObjectQuery 查询生成器方法,例如,Where、OrderBy 或 Select。
注意 调用查询方法时,连接将打开,并且一直保持打开状态,直到 ObjectResult 已被完全消耗或处置为止。
对象服务通过 Connection 属性公开 EntityConnection。这使您能够管理连接和事务处理或提供您自己的 EntityConnection。当您想要在短暂的对象上下文中使连接保持打开状态以便提高性能或显式控制事务处理时,这是有用的。实体框架 使用的同一提供程序连接可以与应用程序的其他部分共享。
在管理连接时,需要考虑以下注意事项:
如果连接在操作之前尚未打开,则对象上下文将打开该连接。如果对象上下文在操作过程中打开连接,它总是在操作完成后关闭该连接。
如果对象上下文创建了连接,该连接总是在上下文被处置时进行处置。
在长期运行的对象上下文中,必须确保该上下文在不再需要时被处置。
如果您为对象上下文提供了 EntityConnection,则必须确保它被处置。
下面的示例说明如何显式打开连接:
' Explicitly open the connection.
advWorksContext.Connection.Open()
// Explicitly open the connection.
advWorksContext.Connection.Open();
有关更多信息,请参见如何:手动从对象上下文打开连接(实体框架)。
当您在长期运行的对象上下文中手动打开连接时,必须调用 Dispose 以确保连接在该上下文不再需要时关闭。您还可以调用 EntityConnection 上的 Close 来显式关闭连接。有关更多信息,请参见如何:在长时间运行的对象上下文中管理连接(实体框架)。
使用对象服务还能够创建 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);
有关更多信息,请参见如何:将 EntityConnection 用于对象上下文(实体框架)。