代码之家  ›  专栏  ›  技术社区  ›  Mandy Hodges

在C#DataContext DNN中使用嵌套事务

  •  0
  • Mandy Hodges  · 技术社区  · 6 年前

    我使用的基本结构是:

    using(IDataContext ctx = DataContext.Instance())
    {
      try{
        ctx.BeginTransaction();
    
        ctx.Commit();
      }
      catch(Exception)
      {
        ctx.RollbackTransaction();
        throw;
      }
    }
    

    我想做的是嵌套事务,以便可以使用函数式编程进行构建。

    非常简单的版本:

    public void DoSomething(){
      using(IDataContext ctx = DataContext.Instance())
      {
        try{
          ctx.BeginTransaction();
           // make a change to the data
          ctx.Commit();
        }
        catch(Exception)
        {
          ctx.RollbackTransaction();
          throw;
        }
      }  
    } 
    
    public void CallingFunction(){
      using(IDataContext ctx = DataContext.Instance())
      {
        try{
          ctx.BeginTransaction();
          //do some stuff
          DoSomething();
          //do some other stuff
          ctx.Commit();
        }
        catch(Exception)
        {
          ctx.RollbackTransaction();
          throw;
        }
      }  
    } 
    

    所以我希望能够有多个“CallingFunctions”,所有这些函数都调用DoSomething(),但是如果DoSomething之后CallingFunction中的代码中抛出异常,那么我希望DoSomething也回滚。

    DoSomething可能与CallingFunction在同一个类中,也可能在另一个类中。

    当然这是可能的,但我还没有找到答案。 谢谢你的帮助。

    在检查了我的代码之后,我意识到它正在使用DotNetNuke.Data命名空间中的DataContext。也许DNN专家可以帮忙?

    1 回复  |  直到 6 年前
        1
  •  0
  •   stephanV    6 年前

    您应该将上下文注入所有需要使用它的函数中,而不是创建它们自己的函数。这样,提交之前的所有更改都在同一事务上,如果有任何错误,您可以回滚所有更改。