在Entity Framework中明确关闭连接

Car*_*ngo 14 c# entity-framework

阅读微软文档http://msdn.microsoft.com/en-us/library/bb738684.aspx我看到他们明确打开并关闭连接

using (EntityConnection conn = new EntityConnection("name=AdventureWorksEntities"))
{ 
    conn.Open();
    ...
    conn.Close();
}
Run Code Online (Sandbox Code Playgroud)

为什么这有必要?

Gio*_*lbo 28

这不是使用EF的"正常"方式.EF通常会为您管理连接.然而:

管理对象服务中的连接(实体框架)

对象服务通过Connection属性公开EntityConnection.这使您可以管理连接和事务或提供自己的EntityConnection.当您希望在短期对象上下文中保持打开连接以提高性能或显式控制事务时,这非常有用.实体框架使用的相同提供者连接可以与应用程序的其他部分共享.

管理连接时,以下注意事项适用:

  • 如果在操作之前尚未打开连接,则对象上下文将打开该连接.如果对象上下文在操作期间打开连接,则它将始终在操作完成时关闭连接.

  • 如果手动打开连接,则对象上下文不会关闭它.调用Close或Dispose将关闭连接.

  • 如果对象上下文创建连接,则在处置上下文时将始终处理连接.

  • 在长时间运行的对象上下文中,必须确保在不再需要上下文时处置该上下文.

  • 如果为对象上下文提供了一个开放的EntityConnection,则必须确保它已被释放.

因此,简而言之,通常您不管理连接,但如果您想出于上述原因手动执行此操作,则可以.如果您决定手动打开连接,则需要手动关闭它(如果您决定手动,EF不会对您做任何假设).


Lad*_*nka 8

没有必要因为Disposeusing语句调用它会处理它.但是,Close一旦您知道不再需要连接,那么明确调用是个好习惯.例如,您不知道处理的复杂程度,因此您希望尽快释放由实体连接包装的数据库连接.