ABP框架中如何实现事务处理和工作单元的长期高效管理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3380个文字,预计阅读时间需要14分钟。
通用连接和事务管理方法+连接和事务管理是使用数据库的应用程序最重要的概念之一。当你启动一个数据库连接时,何时开始事务,如何释放连接等,都是这一类问题。正如大家所知的...
通用连接和事务管理方法
连接和事务管理是使用数据库的应用程序最重要的概念之一。当你开启一个数据库连接,什么时候开始事务,如何释放连接...诸如此类的。
正如大家都知道的,.Net使用连接池(connection pooling)。因此,创建一个连接实际上是从连接池中取得一个连接,会这么做是因为创建新连接会有成本。如果没有任何连接存在于连接池中,一个新的连接对象会被创建并且添加到连接池中。当你释放连接,它实际上是将这个连接对象送回到连接池。这并不是实际意义上的释放。这个机制是由.Net所提供的。因此,我们应该在使用完之后释放掉连接对象。这就是最佳实践。
在应用程序中,有两个通用的方来创建/释放一个数据库连接:
第一个方法:在Web请求到达的时候,创建一个连接对象。(Application_BeginRequest这个位于global.asax中的事件),使用同一个连接对象来处理所有的数据库操作,并且在请求结束的时候关闭/释放这个连接 (Application_EndRequest事件)。
这是个简易但却没效率的方法,原因:
- 或许这个Web请求不需要操作数据库,但是连接却会开启。这对于连接池来说是个毫无效率的使用方式。
- 这可能会让Web请求的运行时间变长,并且数据库操作还会需要一些执行。这也是一种没效率的连接池使用方式。
- 这对于Web应用来说是可行的。如果你的应用程序是Widnows Service,这可能就无法被实现了。
- 同样的这是一个使用事务式的数据库操作最佳场景。如果有一个操作发生失败,所有的操作都会回滚。因为事务会锁住数据库中的一些数据列(事件数据表),它必定要是短暂的。
第二个方法: 创建一个连接当需要的时候(只要在使用它之前)并且释放它在使用它之后。
本文共计3380个文字,预计阅读时间需要14分钟。
通用连接和事务管理方法+连接和事务管理是使用数据库的应用程序最重要的概念之一。当你启动一个数据库连接时,何时开始事务,如何释放连接等,都是这一类问题。正如大家所知的...
通用连接和事务管理方法
连接和事务管理是使用数据库的应用程序最重要的概念之一。当你开启一个数据库连接,什么时候开始事务,如何释放连接...诸如此类的。
正如大家都知道的,.Net使用连接池(connection pooling)。因此,创建一个连接实际上是从连接池中取得一个连接,会这么做是因为创建新连接会有成本。如果没有任何连接存在于连接池中,一个新的连接对象会被创建并且添加到连接池中。当你释放连接,它实际上是将这个连接对象送回到连接池。这并不是实际意义上的释放。这个机制是由.Net所提供的。因此,我们应该在使用完之后释放掉连接对象。这就是最佳实践。
在应用程序中,有两个通用的方来创建/释放一个数据库连接:
第一个方法:在Web请求到达的时候,创建一个连接对象。(Application_BeginRequest这个位于global.asax中的事件),使用同一个连接对象来处理所有的数据库操作,并且在请求结束的时候关闭/释放这个连接 (Application_EndRequest事件)。
这是个简易但却没效率的方法,原因:
- 或许这个Web请求不需要操作数据库,但是连接却会开启。这对于连接池来说是个毫无效率的使用方式。
- 这可能会让Web请求的运行时间变长,并且数据库操作还会需要一些执行。这也是一种没效率的连接池使用方式。
- 这对于Web应用来说是可行的。如果你的应用程序是Widnows Service,这可能就无法被实现了。
- 同样的这是一个使用事务式的数据库操作最佳场景。如果有一个操作发生失败,所有的操作都会回滚。因为事务会锁住数据库中的一些数据列(事件数据表),它必定要是短暂的。
第二个方法: 创建一个连接当需要的时候(只要在使用它之前)并且释放它在使用它之后。

