Sql server 数据库连接生存期-短生存期vs每个请求
我有一个MVC应用程序,使用StructureMap for IoC 在应用程序中,通过实体框架的数据访问率为95%;但是,有一些原始ADO.NET存储库使用了Sql server 数据库连接生存期-短生存期vs每个请求,sql-server,asp.net-mvc,entity-framework,connection-pooling,structuremap,Sql Server,Asp.net Mvc,Entity Framework,Connection Pooling,Structuremap,我有一个MVC应用程序,使用StructureMap for IoC 在应用程序中,通过实体框架的数据访问率为95%;但是,有一些原始ADO.NET存储库使用了IDbConnection实例 目前,我使用IoC容器注册IDbConnection,如下所示 init.For<IDbConnection>() .HybridHttpOrThreadLocalScoped() .Use(() => this._connectionFactory.CreateConne
IDbConnection
实例
目前,我使用IoC容器注册IDbConnection
,如下所示
init.For<IDbConnection>()
.HybridHttpOrThreadLocalScoped()
.Use(() => this._connectionFactory.CreateConnection(config.ConnectionString));
init.Forward<IDbConnection, DbConnection>();
init.For()
.HybridHttpOrthReadLocalScope()文件
.使用(()=>this._connectionFactory.CreateConnection(config.ConnectionString));
init.Forward();
。。。并在必要时将IDbConnection
注入原始ADO.NET存储库
但是,目前我有\u connectionFactory.CreateConnection()
返回一个打开的连接,目的是允许StructureMap在请求结束时关闭连接
这样做明智吗
在请求的整个生命周期内共享一个打开的连接,还是仅在必要时打开/关闭并保持连接的短暂性更好?是否希望EF进程和ADO.NET进程在一个事务中运行?目前这不是一个要求。然而,沿着某条路线走下去会不会使这一点在将来变得困难?也许,如果您想将代码包装在
TransactionScope
(这是在一个事务中捆绑db交互的一种推荐方式),则当此作用域处于活动状态时,必须打开所有连接。还有,但这可能有点离题,它们应该有完全相同的连接字符串,以防止MSDTC启动。我认为连接字符串不会有问题。我更感兴趣的是,在整个请求范围内保持连接打开是否是一种不好的做法。