Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF:在手动调用OpenConnection时,是否应该显式关闭数据库连接_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

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

C# EF:在手动调用OpenConnection时,是否应该显式关闭数据库连接,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我在构造函数中打开连接。 考虑这个代码: public abstract class DataContext : DbContext, IDataContext { static DataContext() { if (DataContextConfiguration.UseSafePersian) { DbInterception.Add(new SafePersianInterceptor());

我在构造函数中打开连接。 考虑这个代码:

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();
        }
    }
当我显式打开连接时是否应该关闭连接

我使用
实体框架
版本6

更新

我犯了这个错误,而且经常发生:

超时已过期。获取数据之前经过的超时时间 来自池的连接。发生这种情况的原因可能是所有的 连接正在使用,已达到最大池大小


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

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

无论如何,当DbContext对象被释放时(例如由垃圾收集器),连接将被关闭。但你应该在完成后马上关闭它


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

我们不知道此方法属于哪个类,因此目前无法回答此问题。什么是
base
question@spender,这是一个正确的猜测(:值得一提的是,如果使用
using
子句初始化上下文,则连接将自动关闭。在这种情况下,它将由于disposing而关闭,因此它实际上不是DbContext本身的自动管理步骤。但是,使用using块几乎总是一个好主意。