C#三层中关于跨层调用事务
本帖最后由 soita 于 2012-06-11 22:50:23 编辑 一般情况下如果要调用事务,会在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数据库
}
}