EF:我应该在手动调用OpenConnection时显式关闭数据库连接

时间:2015-01-21 12:22:18

标签: c# entity-framework entity-framework-6

我在构造函数中打开连接。 请考虑以下代码:

public abstract class DataContext : DbContext, IDataContext
{
    static DataContext()
    {
        if (DataContextConfiguration.UseSafePersian)
        {
            DbInterception.Add(new SafePersianInterceptor());                
        }
    }

    private readonly bool _saveChangesOnModify = false;

    protected DataContext(string nameOrConnectionString)
        : base(nameOrConnectionString)
    {
        this.OpenConnection();
    }
   internal void OpenConnection()
        {
            if (((IObjectContextAdapter)this).ObjectContext.Connection.State != ConnectionState.Open)
                ((IObjectContextAdapter)this).ObjectContext.Connection.Open();
        }
    }

当我明确打开连接时,我应该关闭连接吗?

我使用Entity Framework版本6。

更新

我收到了这个错误并且经常发生:

  

超时已过期。在获得a之前经过了超时时间   从游泳池连接。这可能是因为所有人都集中了   正在使用连接并达到最大池大小。

1 个答案:

答案 0 :(得分:4)

通常,EF在操作完成之前/之后自动打开和关闭连接。但是,如果手动打开连接,EF将在数据库操作完成后不会为您关闭它。

如果您不需要,最好关闭连接。这也是DbContext短暂存在的最佳实践(如果在您的场景中可能的话)。

无论如何,当你的DbContext对象被处理时(例如垃圾收集器),连接将被关闭。但是你应该在完成后立即关闭它。

有关EF连接管理的详细信息,请参阅以下MSDN页面。