嗨,我使用實體框架4.1代碼第一種方法。我有類MyContainer
,繼承DBContext
。事務死鎖和的DbContext
我有一個具有7個步驟的每個步驟訪問許多存儲庫的方法(約60)。該過程中自動或碼的手動執行取決於業務邏輯和用戶要求的過程。現在的視圖用於自動處理性能點i創建的上下文即MyContainer
一次對象,並把它傳遞給所有方法和處理它在過程結束時和它的工作正常和改進的performance.But當執行該過程碼的手動相同方法執行並創建容器並將其放置在方法本身中。例如下面,但它只是粗略的代碼。
public bool UpdateProcess(Process process, MyContainer container = null)
{
bool disposeContainer = false;
if (container == null)
{
container = new MyContainer();
disposeContainer = true;
}
var result = SaveProcess(container, process);
container.SaveChanges();
if (disposeContainer)
container.Dispose();
return result;
}
對於自動過程事務在過程的開始時被創建並在該過程的結束和用於手動事務在其根據UI上的用戶動作調用該方法的BLL創建結束。現在假設我的自動進程正在運行,同時用戶在UI上執行了一些操作,我得到了異常"Transaction (Process ID 65)
死鎖了與另一個進程的鎖定資源並且已被選中「當UpdateProcess()方法從mannual和自動進程一起調用時,I把它放在container.SaveChanges()
任何幫助將不勝感激
如果我創建這個倉庫方法的事務範圍像
public bool UpdateProcess(Process process, MyContainer container = null)
{ bool disposeContainer = false;
if (container == null)
{
container = new MyContainer();
disposeContainer = true;
}
using(var trans=new TransactionScop(TransactionScopeOption.RequiresNew))
{
var result = SaveProcess(container, process);
container.SaveChanges();
trans.Complete();
}
if (disposeContainer)
container.Dispose();
return result;
}
它工作正常。 但是我不想因爲交易已經在BLL已作出創建倉庫交易。
任何幫助將appericiated。
一切工作正常,如果我創建並配置自動處理容器中的每一個方法,而不是在過程的開始創建的貨櫃,並在過程結束處置它 – ethicallogics
我鏈接的定義[死鎖](http://en.wikipedia.org/wiki/Deadlock),如果它是多餘的道歉。 –
感謝您的努力BT它不幫助我的問題。 – ethicallogics