我们有一个带有服务堆栈的Web应用程序和数据服务应用程序。当我浏览主页面(查询数据服务)并按住F5按钮一段时间后,关闭连接。
“ExecuteReader需要一个开放且可用的连接。连接的当前状态已关闭。”
像这样添加OrmLiteConnectionFactory;
container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(ApplicationConfigGlobal.DbConnString, SqlServerDialect.Provider)).ReusedWithin(ReuseScope.Request);
我们的回购实施
public class BaseRepository : IDisposable
{
public IDbConnectionFactory DbFactory { get; set; }
private IDbConnection _dbConn;
protected IDbConnection DbConn
{
get
{
return _dbConn ?? (_dbConn = DbFactory.Open());
}
}
public void Dispose()
{
if (_dbConn != null)
_dbConn.Dispose();
}
在您看来我错过了哪些细节?
我们已经完成了如下的解决方法。但我们还没有在生产环境中测试它。
public class BaseRepository
{
public IContainer Container { get; set; }
public IDbConnection DbConn
{
get
{
var conn = Container.TryResolve<IDbConnection>();
if (conn.State == ConnectionState.Closed)
{
conn.Close();
conn.Open();
}
return conn;
}
}
}