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

5 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我显式打开连接时是否应该关闭连接?

我用的是Entity Framework版本6。

更新

我收到此错误并且经常发生:

超时已过。从池中获取连接之前超时时间已过。发生这种情况的原因可能是所有池连接都在使用中并且已达到最大池大小。

Att*_*nik 5

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

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

无论如何,当 DbContext 对象被处置(例如通过垃圾收集器)时,连接将被关闭。但您应该在完成后立即将其关闭。

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