【问题标题】:Using same transaction in workflow在工作流中使用相同的事务
【发布时间】:2012-10-10 11:10:21
【问题描述】:

如果我的问题看起来很愚蠢,请原谅我,但我对 Workflow 完全陌生。我想做的是:我在 Workflow Foundation 项目中有一些数据库命中,在 ASP.NET 应用程序中有一些命中。我想要实现的是在同一个事务中在 Workflow Foundation 和 ASP.NET 中执行数据库操作。告诉我可能吗?我正在使用 linq2sql。

这是我的代码:

 using(var context = new MyDBContext())
 {
     context.Transaction = context.Connection.BeginTransaction();

     //Here I am calling my Workflow function

     using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
    {
        AutoResetEvent waitHandle = new AutoResetEvent(false);
        workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
        {
            waitHandle.Set();
            if ((string)e.OutputParameters["OutputMessage"] != "")
                msg = "Workflow error : " + (string)e.OutputParameters["OutputMessage"];
        };
        workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
        {
            Console.WriteLine("ERROR: " + e.Exception.Message);
            waitHandle.Set();
        };

        WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(MyWorkflow),           parameters);
        instance.Start();            
        waitHandle.WaitOne();
     }

     //DB Operation in ASP.NET 
     context.DbOperation();
     context.SubmitChanges();
     context.Transaction.Commit();
 }

【问题讨论】:

    标签: c# asp.net linq-to-sql transactions workflow


    【解决方案1】:

    我不这么认为。 instance.Start() 立即返回。实际的工作流活动将在不同的线程中运行(并且可能在不同的进程或不同的机器中)。您必须在工作流程中管理事务。

    【讨论】:

    • 即使我在 Workflow 中管理事务,如何将完整的数据库操作放在一个事务中?我的意思是我 50% 的数据库操作在 Web 应用程序中,50% 在工作流中。
    • 您可以向工作流提供从数据库读取的数据,让工作流处理并仅在工作流终止时更新数据库。
    • 您的意思是将整个数据作为参数传递给 Workflow 并执行 db 操作?
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 2015-03-27
    • 2021-10-20
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多