【问题标题】:Manage Transactions on Business Layer管理业务层上的事务
【发布时间】:2012-07-23 13:42:54
【问题描述】:

我想在我的业务层中使用 TransactionScope 类来管理数据访问层中的数据库操作。

这是我的示例代码。当我执行它时,它会尝试启用 dtc。我想在不启用 dtc 的情况下进行操作。

我已经查看了https://entlib.codeplex.com/discussions/32592 文章。它对我不起作用。我阅读了很多关于这个主题的文章,但没有一篇真正涉及到企业库,或者我没有看到。

顺便说一句,我可以通过 dotnet sql 客户端使用 TransactionScope,而且效果很好。

SampleInsert() 方法的内部是什么?

谢谢,

业务层方法:

public void SampleInsert()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                Sample1DAL dal1 = new Sample1DAL(null);
                Sample2DAL dal2 = new Sample2DAL(null);
                Sample3DAL dal3 = new Sample3DAL(null);
                dal1.SampleInsert();
                dal2.SampleInsert();
                dal3.SampleInsert();
                scope.Complete();
            }
        }

数据访问层方法:

//sampleInsert method structurally same for each 3 dal

public void SampleInsert()
        {
            Database database = DatabaseFactory.CreateDatabase(Utility.DATABASE_INFO); ;
            using (DbConnection conn = database.CreateConnection())
            {
                conn.Open();
                DbCommand cmd = database.GetStoredProcCommand("P_TEST_INS", "some value3");
                database.ExecuteNonQuery(cmd);
            }
        }

【问题讨论】:

    标签: enterprise-library transactionscope


    【解决方案1】:

    您好,是的,这将启用 dtc,因为您正在一个 TransactionScope 中创建 3 个数据库连接。当在同一个 TransactionScope 中创建多个数据库连接时,本地事务会升级为分布式事务,因此 dtc 将能够管理分布式事务。您必须以一种为整个 TransactionScope 只创建一个数据库连接的方式进行操作。我希望这会给你一个想法。

    【讨论】:

    • 谢谢,这才是真正的原因。
    【解决方案2】:

    在研究和观察查询分析器之后,我更改了 SampleInsert() 主体,如下所示,它起作用了。问题在于 ethicallogics 提到每次我访问数据库时都会打开新连接。

    public void SampleInsert()
            {
                Database database = DatabaseFactory.CreateDatabase(Utility.DATABASE_INFO);
                using (DbCommand cmd = database.GetStoredProcCommand("P_TEST_INS", "some value1"))
                {
                    database.ExecuteNonQuery(cmd);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多