Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在csla和手动transactionscope中使用事务_C#_Transactions_Csla - Fatal编程技术网

C# 在csla和手动transactionscope中使用事务

C# 在csla和手动transactionscope中使用事务,c#,transactions,csla,C#,Transactions,Csla,所以希望有一些CSLA的技能可以帮助我找到更好的方法。在这种情况下,我希望从对象外部手动创建事务,并将transactionAttribute设置为manual 我有一些代码如下所示: using (SqlConnection conn ConnectionManager<SqlConnection>.GetManager("Db").Connection) { connectionTransaction = conn.BeginTransaction(); obj

所以希望有一些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();
}
使用(SqlConnection conn ConnectionManager.GetManager(“Db”).Connection)
{
connectionTransaction=conn.BeginTransaction();
objectRef=objectRef.Save();
//这里还有其他逻辑
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();
    }
}
使用(var conn=ConnectionManager.GetManager(“Db”).Connection)
{
使用(var cm=conn.CreateCommand())
{
cm.CommandType=CommandType.StoredProcess;
cm.CommandText=“程序名称”;
//参数定义
cm.ExecuteNonQuery();
}
}
执行此操作时,我收到以下错误:

当分配给该命令的连接处于挂起的本地事务中时,ExecuteOnQuery要求该命令具有事务。命令的事务属性尚未初始化

好的,这就是它所说的,我可以通过将事务分配给命令来轻松修复。但我想知道,根据CSLA最佳实践,这是否真的是正确的结构。在我最近买的那本书中,我似乎找不到一个好的例子

我无法想象,告诉我的域对象代码像在事务中一样运行是一种好的做法,而有时它可能不是


有人能告诉我需要做些什么来正确地解决这个问题吗?

好的,所以我需要改变很多事情。但是这种情况的一个突出问题是,我在using语句中使用了连接。它一离开就被处理掉了。由于该事务通过了类似这样的几种方法,所以在第一次调用之后,我的连接和事务被处理掉了

我现在只是有一个无聊的时刻,我意识到了这一点。我讨厌有时候答案如此明显