2010-07-01 81 views
0

所以希望有一些CSLA技能可以帮助我看到更好的方法。我有一种情况,我想从对象外部手动创建事务,并将我的transactionAttribute设置为手动。在csla和手动交易系统中使用交易

所以我有一些代码,看起来像这样:

using (SqlConnection conn ConnectionManager<SqlConnection>.GetManager("Db").Connection) 
{ 
    connectionTransaction = conn.BeginTransaction(); 

    objectRef = objectRef.Save(); 

    //other logic here 

    objectRef = objectRef.Save(); 
    connectionTransaction.Commit(); 
} 

然后保存方法中有这样的事情对于数据访问:

using (var conn = ConnectionManager<SqlConnection>.GetManager("Db").Connection) 
{ 
    using (var cm = conn.CreateCommand()) 
    { 
     cm.CommandType = CommandType.StoredProcedure; 
     cm.CommandText = "Proc_Name"; 

     // param definitions 

     cm.ExecuteNonQuery(); 
    } 
} 

当我做到这一点我收到以下错误:

当分配给命令的连接处于未决的本地事务中时,ExecuteNonQuery需要该命令进行事务。该命令的Transaction属性尚未初始化。

好了,这样才能理解它在说什么,我可以通过将事务分配给命令来轻松修复。但我想知道这是否按照CSLA的最佳实践正确构建。我似乎无法在最近得到的书中找到一个很好的例子。

我只是无法想象,告诉我的域对象代码像在事务中那样行为的时候,有时候可能会出现这种情况。

任何人都可以告诉我什么我需要做的事情来解决这个问题吗?

回答

0

好吧,我需要改变很多东西。但是,这种情况的一个明显问题是,我在使用声明中使用了连接。一旦它退出,它将被处置掉。由于这个事务经过了几个这样的方法,结果证明我的连接和事务在第一次调用后被处理掉了。

我刚刚有一个时刻,我意识到这一点。我讨厌有时候答案会如此明显。