2012-10-10 19 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並執行數據庫操作? –