使用ADO.net连接每个请求,是或否?

时间:2012-12-11 19:31:25

标签: asp.net entity-framework ado.net database-connection connection-pooling

是否可以打开IDbConnection数据库并在当前请求中的所有被调用方法中使用它,然后允许DI容器将其置于Application_EndRequest中,就像“每个请求的上下文一样” “与实体框架等O / RM一起使用的模式?

或者我应该在每种方法中打开和关闭连接?

2 个答案:

答案 0 :(得分:0)

最好是在请求中创建连接,并在触发页面卸载事件时将其处理掉。通过这种方式,您将处理掉不需要的资源。

您必须遵循以下方式: -

  • 覆盖Page_PreInit:初始化连接,打开它并开始新的交易。

  • 覆盖Page_Load:读取数据库并创建集合。

  • 覆盖Page_Unload:提交/回滚事务,关闭连接。

  • 覆盖Dispose:实现IDisposable并处理基础对象。

答案 1 :(得分:0)

我知道 WebDbConnector 库可以提供帮助。它将帮助您的Web应用程序使用Ado.Net(SqlConnection),Linq To Sql(DataContext)和Entity Framework(ObjectContext和DbContext)为每个请求创建和维护与数据库的连接。

例如:

// The first parameter of SqlWebDbConnector is connection string
// or connection string name(in Web.config)
var context = new WebDbConnectorContext<SqlConnection>(
    new SqlWebDbConnector("Test", true));
var sqlContext = context.GetCurrentContext();
// TODO: write your own code

然后,您可以通过继承 WebDbConnectorHttpApplication 来实现关闭和释放所有资源。

我希望这可以帮到你。

https://github.com/congdongdotnet/WebDbConnector的更多信息。