所以希望有一些CSLA技能可以帮助我看到一个更好的方法。我有一种情况,我想从对象外部手动创建我的事务,并将transactionAttribute设置为手动。
所以我有一些看起来像这样的代码:
using (SqlConnection conn ConnectionManager<SqlConnection>.GetManager("Db").Connection)
{
connectionTransaction = conn.BeginTransaction();
objectRef = objectRef.Save();
//other logic here
objectRef = objectRef.Save();
connectionTransaction.Commit();
}
然后在save方法中有类似的东西用于数据访问:
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 :(得分:0)
好的,所以我需要改变很多东西。但是这种情况的一个明显问题是我在using语句中使用了连接。一旦它退出,它就会被处理掉。由于此事务经历了这样的几种方法,因此结果显示我的连接和事务在第一次调用后被处理掉。
我刚才有一个这样的时刻,我意识到了这一点。我讨厌有时答案如此明显。