ado.net统一事务,及连接池管理(一)

来源:互联网 发布:网络的利与弊英语作文 编辑:程序博客网 时间:2024/06/10 08:27

一、引子

在分层架构的系统中,业务层(Buiness)通常需要调用多个数据访问层(DAO)方法才能实现1个完整的业务数据处理,这就需要考虑事务的统一管理。除了重量级的COM+外,能否有一种轻量有的事务管理方法呢?我思考良久,也曾在CSDN发贴寻求良方。

二、解决方案

经过数次的试验,决定借鉴如java中JTA的概念,将数据库连接与线程绑定,同一线程中启动的事务即为同一事务。终于可行,不敢独享。具体遵循如下:

1、由‘事务管理器’统一管理事务及数据库连接,防止数据库连接的实例在各层方法中层层传递,甚至做到在某些层次看不到事务及连接,只感觉到对象。

2、‘事务管理器’能够不同的数据源,即需要抽象出数据库连接管理器。

3、同一线程中启动的事务为同一事务。将数据库连接放入到HashTable,并以CurrentTread为key。

4、给数据库事务的标志属性(如:事务是否已经开始)加使用特性(Attribute)ThreadStatic。