C#三层中关于跨层调用事务
一般情况下如果要调用事务,会在DAL中创建Connection的时候启用事务,并将事务挂到Command中。然后根据情况来Commit或者Rollback。
以上没什么问题。
现在的情况是在BLL中会调用某一个或者多个DAL中的方法,每个方法都会单独开启一个连接,并执行SQL语句。
至于为什么要单独开启一个连接,原因很简单:因为使用到的数据库不同。
例如:BLL中ClassA类调用DAL中ClassB类的IntoX方法和IntoY方法。而IntoX方法会使用DataA数据库,IntoY方法会调用DataB数据库。两个数据库的连接字符串当然会不一样,甚至有时候会是一个MSSql一个Oracle。
总不能用DataA的事务来回滚DataB的操作吧?
那么如何能在IntoY方法发生错误时,连IntoX中的操作一起回滚掉?
大概的结构:
public class ClassA{ ClassB b = new ClassB(); public void Test() { b.IntoX(); b.IntoY(); //如果IntoY的操作发生错误 if(false) { //回滚IntoX和IntoY的操作 } }}public class ClassB{ public void IntoX() { //操作DataA数据库 } public void IntoY() { //操作DataB数据库 }}