2012-10-10 13 views
0

如果我的问题看起来很愚蠢,但我完全不熟悉Workflow。我想要做的是:我在Workflow Foundation项目中有一些数据库命中,而在ASP.NET应用程序中有一些数据库命中。我试图实现的是在同一个事务中在Workflow基础和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(); 
} 

回答

1

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

+0

即使我在Workflow中管理事务,如何将完整的数据库操作放在一个事务中?我的意思是我的数据库操作的50%在Web应用程序中,50%在工作流程中。 –

+0

您可以使用从数据库读取的数据为工作流提供工作流,让工作流程处理并仅在工作流程终止时更新数据库。 – xing

+0

您的意思是将整个数据作为参数传递给Workflow并执行数据库操作? –