代码之家  ›  专栏  ›  技术社区  ›  Eran Betzalel

如何在DotnetNuke中使用事务?

  •  3
  • Eran Betzalel  · 技术社区  · 15 年前

    我正在尝试做最简单的事情,并将事务应用到 CreatePortal 方法。

    如果我在用 TransactionScope -它会因为一些未知的原因而升级到DTC-坏。

    using (var ts = new TransactionScope())
    {
        var portalController = new PortalController();
    
        var portalId =
            portalController.CreatePortal(
                        "TESTTESTTEST",
                        string.Empty,
                        string.Empty,
                        "TESTTESTTEST_" + new Random().Next(999999),
                        UserController.GeneratePassword(),
                        "TESTTESTTEST_" + new Random().Next(999999) + "@something.com",
                        string.Empty,
                        string.Empty,
                        Globals.ApplicationMapPath + "/Portals/_default/",
                        "Default Website.template",
                        "Portals/TESTTEST",
                        "TESTTESTTEST",
                        string.Empty,
                        string.Empty,
                        false);
    
        ts.Complete();
    }
    

    如果我在用 DataProvider.Instance().GetTransaction 并执行 RollbackTransaction 最后——它不会回滚,这意味着事务甚至都不工作。

    var t = Data.DataProvider.Instance().GetTransaction();
    
    var portalController = new PortalController();
    
    var portalId =
        portalController.CreatePortal(
                    "TESTTESTTEST",
                    string.Empty,
                    string.Empty,
                    "TESTTESTTEST_" + new Random().Next(999999),
                    UserController.GeneratePassword(),
                    "TESTTESTTEST_" + new Random().Next(999999) + "@something.com",
                    string.Empty,
                    string.Empty,
                    Globals.ApplicationMapPath + "/Portals/_default/",
                    "Default Website.template",
                    "Portals/TESTTEST",
                    "TESTTESTTEST",
                    string.Empty,
                    string.Empty,
                    false);
    
    Data.DataProvider.Instance().RollbackTransaction(t);
    

    那么,如何在dotnetnuke中使用事务?

    2 回复  |  直到 13 年前
        1
  •  1
  •   bdukes Jon Skeet    15 年前

    当您通过 GetTransaction 方法 DataProvider 只需创建一个新连接并为您提供事务。然后,您需要手动使用该事务来执行您要对数据库采取的任何操作。例如,没有一种方法可以通过该事务来使用它, CreatePortal 或任何其他内置的dnn函数。该功能似乎只适用于您可能进行的任何其他数据库访问。

    关于如何在事务中包装来自dnn核心的调用,我认为您不能。我知道要推荐的最干净的解决方案(不幸的是,仍然不是很干净)是使用事务手动调用存储过程,而不是通过Controller类。

    您的用例是什么,也许我可以推荐一种解决方案,以其他方式解决问题…

        2
  •  1
  •   roman m    13 年前

    我可以在DNN的帮助下使用事务 this article .

    它不适用于您的情况,但会帮助其他人试图利用dnn中的交易。