我使用实体框架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