我在實體框架中爲兩個不同的數據庫創建了兩個不同的上下文。現在我試圖在單個事務中更新這些數據庫。我的代碼是這樣的:實體框架中的一個事務中的多個數據庫
public class LPO_BLL
{
internal Context1 _context1 = null;
internal Context2 _Context2 = null;
public LPO_Detail_BLL(Context1 context1, Context2 context2)
{
_context1 = context1;
_context2 = context2;
}
public void Insert(PM_LPO lpo, LPO_Transaction lpo_transaction)
{
using (TransactionScope transaction = new TransactionScope())
{
_context1.LPO.Add(lpo);
_context1.SaveChanges();
_context2.LPO_Transaction.Add(lpo_transaction);
_context2.SaveChanges(); // I am getting error here...
transaction.Complete();
}
}
}
而且在UI項目,我調用此爲:
LPO lpo = new LPO();
//setting properties of lpo
LPO_Transaction lpo_trans = new LPO_Transaction();
//setting properties of lpo_trans
Context1 _context1 = new Context1();
//Opening _context1 connection and etc
Context2 _context2 = new Context2();
//Opening _context2 connection and etc
LPO_BLL lpo_bll = new LPO_BLL(_context1, _context2);
lpo_bll.Insert(lpo,lpo_trans);
目前,我得到錯誤: 基礎提供失敗的EnlistTransaction
經過最近3小時在互聯網上搜索並嘗試不同的命中和試用方法後,我決定把它放在SO上。到目前爲止,我發現這兩個環節來有點接近:
TransactionScope - The underlying provider failed on EnlistTransaction. MSDTC being aborted
我使用SQL Server作爲兩種上下文的提供者。 –
MSDTC是否正在運行?你是如何創建連接字符串的? – JotaBe
我在Application_Start事件中的Global.ascx中創建連接字符串。我不知道MSDTC是否在運行? –