我正在涉足 MVC3,并且正在构建一个连接到 SQL Server 的站点(我敢肯定,这并不奇怪)。我正在使用一个名为 SqlRepository 的基类,它将由各种其他存储库类扩展用于不同的业务对象。基类将处理打开一个数据库连接,该连接将在请求的生命周期内在所有其他实例之间共享(换句话说,一个单例)。它看起来像这样:
public abstract class SqlRepository {
protected SqlConnection dbconn;
public SqlRepository() {
if (HttpContext.Current.Items["dbconn"] == null) {
dbconn = new SqlConnection(WebConfigurationManager.ConnectionStrings["SqlRepositoryConnection"].ConnectionString);
dbconn.Open();
HttpContext.Current.Items["dbconn"] = dbconn;
} else {
dbconn = (SqlConnection)HttpContext.Current.Items["dbconn"];
}
}
}
子类将为不同的存储库类型实现各种接口,并将通过 Ninject 注入。
那么,确保在每个请求生命周期结束时关闭数据库连接的好方法是什么?我想在没有很多额外依赖的情况下做到这一点,也不需要从控制器内显式关闭连接(因为我将为其他虚拟存储库提供不同的构建配置,甚至可能不使用基于 SQL 的存储库在开发/调试前端时)。
我怀疑有一个简单的解决方案,但我还没有对 MVC3 做足够的工作来知道我应该在哪里处理这个问题。