在Entity Framework中明确关闭连接

时间:2011-03-12 22:20:29

标签: c# entity-framework

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

using (EntityConnection conn = new EntityConnection("name=AdventureWorksEntities"))
{ 
    conn.Open();
    ...
    conn.Close();
}

为什么这有必要?

2 个答案:

答案 0 :(得分:28)

这不是使用EF的“正常”方式。 EF通常会为您管理连接。但是:

Managing Connections in Object Services (Entity Framework)

  

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

     

管理连接时需要考虑以下注意事项:

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

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

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

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

  •   
  • 如果您为对象上下文提供了一个打开的 EntityConnection ,则必须确保它已被丢弃。

  •   

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

答案 1 :(得分:8)

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