TransactionScope 中的异常

发布于 2024-11-28 03:18:17 字数 1197 浏览 0 评论 0原文

行运行以下代码时,出现以下异常。

EntityScope<TQFormContext>.CurrentObjectContext.SaveChanges();

当我在“与当前连接关联的事务已完成但尚未释放。必须在连接可用于执行 SQL 语句之前释放事务”

[TestMethod()]
    public void TransactionTest()
    {
        using (TransactionScope tc = new TransactionScope())
        {

            var u1 =  EntityScope<TQFormContext>.CurrentObjectContext.ASUsers.FirstOrDefault(u => u.UserID == 1);

            var u2 = PersistenceManager.GetById<TQ.Business.PO.Administration.UserPO>(2);
            u1.MiddleInitial = "1";
            u2.MiddleInitial = "1";

            using (SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            {
                SqlCommand sqlComm = new SqlCommand("Update asusers set middleinitial='1' where userid=3", sqlConn);
                sqlConn.Open();
                sqlComm.ExecuteNonQuery();
            }

            PersistenceManager.SaveOrUpdate(u2);
            EntityScope<TQFormContext>.CurrentObjectContext.SaveChanges();

         //   throw new Exception("Blah");
            tc.Complete();
        }
    }

I get the following exception when I run the following code at line

EntityScope<TQFormContext>.CurrentObjectContext.SaveChanges();

"The transaction associated with the current connection has completed but has not been disposed. The transaction must be disposed before the connection can be used to execute SQL statements."

[TestMethod()]
    public void TransactionTest()
    {
        using (TransactionScope tc = new TransactionScope())
        {

            var u1 =  EntityScope<TQFormContext>.CurrentObjectContext.ASUsers.FirstOrDefault(u => u.UserID == 1);

            var u2 = PersistenceManager.GetById<TQ.Business.PO.Administration.UserPO>(2);
            u1.MiddleInitial = "1";
            u2.MiddleInitial = "1";

            using (SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
            {
                SqlCommand sqlComm = new SqlCommand("Update asusers set middleinitial='1' where userid=3", sqlConn);
                sqlConn.Open();
                sqlComm.ExecuteNonQuery();
            }

            PersistenceManager.SaveOrUpdate(u2);
            EntityScope<TQFormContext>.CurrentObjectContext.SaveChanges();

         //   throw new Exception("Blah");
            tc.Complete();
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

⊕婉儿 2024-12-05 03:18:17

默认的 Transaction Scope 选项是必需的,这将使您的新 TransactionScope 加入现有的环境事务。所以我认为如果您在构造函数中传递 RequiresNew Transaction Scope 选项,这应该可以工作。

The default Transaction Scope option is Required which will make your new TransactionScope join an existing ambient transacton. So I think if you pass the RequiresNew Transaction Scope option in your constructor this should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文