避免System.Transactions中的事务升级的策略

Rob*_*rth 7 architecture ado.net transactions system.transactions n-tier-architecture

因此,基于回答我刚才的问题,交易得到来自LTM到DTC,如果多个连接在一个事务中打开,即使连接都具有相同的连接字符串升高.

所以,我的下一个问题是,可以采用什么策略来避免这种"功能"?在我看来,基于资源使用,我想确保尽可能多地使用LTM.在正确的面向对象的业务逻辑层中,我能想到的唯一方法是在数据访问层创建请求级静态连接对象,并在调用之间共享,直到请求完成(这里隐含的知识)是业务对象实体是谨慎的,不知道他们被调用的是什么顺序,另外一个事实是,人们不希望将连接对象冒泡到业务对象层,因为这将是数据存储实现细节流血到另一层).

有没有其他人有任何想法不会完全破坏n层系统的层封装?

tva*_*son 2

我使用的是 TransactionHelper 类,它更新 TableAdapter 中的所有命令,以将连接和事务替换为启动事务的 TableAdapter 中的命令。您可以在 Scott Lanford 的博客CodeExperiment上找到一些执行此操作的代码,您可以根据需要进行调整。瑞安惠特克也有类似的做法

请注意,自从我改用 LINQToSQL 后,我就不再遇到这个问题了。您可能需要考虑使用 LINQToSQL 或 nHibernate 作为替代解决方案。两者都会对本地交易有良好的支持。