所以希望有一些 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 最佳实践正确构建。我似乎在我最近得到的书中找不到一个很好的例子。
我只是无法想象告诉我的域对象代码表现得像在事务中的行为是一种好习惯,而有时它可能不是。
谁能告诉我我需要做些什么来正确解决这个问题?