博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

研究心得 - Data Application Block

Posted on 2007-04-13 11:24  dingsheng  阅读(400)  评论(1)    收藏  举报
新的Data Application Block里面有一些改进,比如新增updateBatchSize,和TransactionScope的整合以及支持SQL CE。

我最感兴趣的是和TransactionScope的整合,以前为了使用DbTransaction和TransactionScope,专门写了Transaction Application Block来管理。新的版本里面已经不需要这么做了,它是这样实现的:

1.Database这个类里面用GetOpenConnection代替了原来的OpenConnection方法,需要更新的操作的时候,先通过一个包装的内部类ConnectionWrapper来取当前的connection,如果有打开的connection,就直接返回,没有就创建。
2.TransactionScopeConnections这个新增的类是核心的实现,它判断当前有没有通过TransactionScope打开的Transaction。

Transaction currentTransaction = Transaction.Current;

如果有的话,就根据数据库名从集合中取出connection,如果没有,就创建connection,并保存到集合里,以便下次取出来。这样的实现,保证单一数据库的事务还是通过DbTransaction来实现的。

本质上来说,和我以前写的Transaction Application Block的实现机制是一样的,都是把conenction保存起来,以便后面的方法都是调用同一个connection。以前的难点是在Business层打开的connection,要传到DataAccess层,现在都是在DataAccess层打开的,就没这个问题了,而且Business层也不需要打开connection了(我一直认为这点很不好)。