所以希望有了一些CSLA技能,我能看到更好的方法。在这种情况下,我希望从对象外部手动创建事务,并将TransactionAttribute设置为Manual。
所以我有一些代码看起来像这样:
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();
}
}
执行此操作时,我收到以下错误:
当分配给命令的连接处于挂起的本地事务中时,ExecuteOnQuery要求命令具有事务。命令的事务属性尚未初始化。
好的,所以这是有意义的,我可以通过将事务分配给命令很容易地修复它。但我想知道,根据CSLA的最佳实践,这是否是正确的结构。在我最近得到的书中,我似乎找不到一个很好的例子。
我只是无法想象告诉我的域对象代码像事务中的代码一样工作是一个很好的实践,有时它可能不工作。
有人能告诉我我需要做什么来正确地解决这个问题吗?