无法使用SubSonic处理事务

时间:2011-03-22 13:03:05

标签: subsonic subsonic2.2

我在ASP.NET / SQL Server 2005中使用SubSonic进行多删除事务时遇到了一些麻烦。它似乎总是在数据库中进行更改,即使没有调用完整的方法也是如此。 transactionscope对象?

我一直在阅读关于此的帖子,并尝试了各种替代方案(切换我的使用语句的顺序),使用DTC,不使用DTC等,但到目前为止没有喜悦。

我将假设这是我的代码问题,但我无法发现问题 - 是否有人能够提供帮助?我正在使用SubSonic 2.2。代码示例如下:

using (TransactionScope ts = new TransactionScope())
            {
                using (SharedDbConnectionScope sts = new SharedDbConnectionScope())
                {
                    foreach (RelatedAsset raAsset in relAssets)
                    {
                        // grab the asset id:
                        Guid assetId = new Select(RelatedAssetLink.AssetIdColumn)
                            .From<RelatedAssetLink>()
                            .Where(RelatedAssetLink.RelatedAssetIdColumn).IsEqualTo(raAsset.RelatedAssetId).ExecuteScalar<Guid>();

                        // step 1 - delete the related asset:
                        new Delete().From<RelatedAsset>().Where(RelatedAsset.RelatedAssetIdColumn).IsEqualTo(raAsset.RelatedAssetId).Execute();

                        // more deletion steps...
                    }

                    // complete the transaction:
                    ts.Complete();
                }
            }

1 个答案:

答案 0 :(得分:1)

你的using语句的顺序是正确的(我记得这个技巧的顺序:连接需要在创建时了解事务,并通过检查`System.Transactions.Transaction.Current来实现)。

一个提示:您不需要使用双括号。而且您不需要引用SharedDbConnectionScope()。 这看起来更具可读性。

using (var ts = new TransactionScope())
using (new SharedDbConnectionScope())
{
    // some db stuff

    ts.Complete();
}

无论如何,我没有看到,为什么这不起作用。 如果问题与MSDTC有关,则会发生异常。

我只能想象,SqlServer 2005配置中存在问题,但我不是SqlServer专家。

也许您应该尝试一些演示代码来验证交易是否有效:

using (var conn = new SqlConnection("your connection String");
{
    conn.Open();
    var tx = conn.BeginTransaction();

    using (var cmd = new SqlCommand(conn)
        cmd.ExecuteScalar("DELETE FROM table WHERE id = 1");

    using (var cmd2 = new SqlCommand(conn)
        cmd2.ExecuteScalar("DELETE FROM table WHERE id = 2");


    tx.Commit();
}

亚音速支持本机事务而不使用TransactionScope:http://subsonicproject.com/docs/BatchQuery