EF:我应该在手动调用 OpenConnection 时显式关闭数据库连接吗
EF: Should I explicitly close database connection when calling OpenConnection manually
我在构造函数中打开连接。
考虑这段代码:
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。
更新
我收到这个错误并且经常发生:
Timeout expired. The timeout period elapsed prior to obtaining a
connection from the pool. This may have occurred because all pooled
connections were in use and max pool size was reached.
通常 EF 会自动打开和关闭连接 before/after 操作已完成。但是,如果您手动打开连接,EF 不会在数据库操作完成后为您关闭它。
最好关闭不需要的连接。 DbContext 的最佳实践也是短暂的(如果在您的场景中可能的话)。
无论如何,连接将在您的 DbContext 对象被处理后关闭(例如通过垃圾收集器)。但是你应该在完成后立即关闭它。
有关 EF 连接管理的更多信息,请参阅以下 MSDN 页面。
我在构造函数中打开连接。 考虑这段代码:
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。
更新
我收到这个错误并且经常发生:
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
通常 EF 会自动打开和关闭连接 before/after 操作已完成。但是,如果您手动打开连接,EF 不会在数据库操作完成后为您关闭它。
最好关闭不需要的连接。 DbContext 的最佳实践也是短暂的(如果在您的场景中可能的话)。
无论如何,连接将在您的 DbContext 对象被处理后关闭(例如通过垃圾收集器)。但是你应该在完成后立即关闭它。
有关 EF 连接管理的更多信息,请参阅以下 MSDN 页面。