我使用實體框架4並滿足以下問題,在環境事務中執行存儲過程。 下面是代碼:調用實體框架中的TransactionScope中的存儲過程
public void UpdateOrderRequest(IOrder order, int requestId, int userId, Fee fee)
{
using (var tscope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
_storedProcedureDA.UpdateOrderRequest(requestId, userId, data.ClientId, data.RequestStatus, data.Date,
data.Type, data.Side, data.Quantity, data.ExecInst, data.Price,
data.StopPrice, data.TimeInForce, data.Description, data.Target);
var feeDa = new FeeDA();
var dbFee = new Domain.Entities.Fee
{
OrderRequestId = requestId,
Identifier = fee.Id,
Value = fee.Value,
};
feeDa.Save(dbFee);
tscope.Complete();
}
}
- _StoredProceduresDA和FEEDA是使用的DataContext的一個實例爲每個數據訪問類。
- _storedProcedureDA.UpdateOrderRequest()方法是剛下
Context.ExecuteFunction<..>("AddOrderRequest",...)
feeDA.Save()
包裝器增加了實體到存儲庫,並呼籲Context.SaveChanges()
- 當我試圖做這樣的判斷,我抓住以下異常:
The transaction operation cannot be performed because there are pending requests working on this transaction.
問題是我需要在一個事務中執行這兩個操作,並且我無法使用Can't I call a stored procedure from Entity Framework inside a transaction scope?(ado.net使用自己的連接)中建議的解決方法 有誰知道如何在事務中包裝DataContext.ExecuteFunction <>()?
P.S.我試圖用它自己的TransactionScope包裝ExecuteFunction和所有可能的參數(Supress等),但是有幫助。
請問您是否可以進一步闡明數據類「每個使用單獨的DataContext」還是「共享一個DataContext」。你的「每個DataContext的實例」都不夠具體...... – 2013-05-16 11:51:51