【发布时间】:2010-11-24 17:42:36
【问题描述】:
我使用 Entity Framework 4 并在环境事务中执行存储过程时遇到以下问题。 代码如下:
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()将实体添加到 Repository 并调用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()?
附:我尝试将 ExecuteFunction 包装在其自己的事务中,并使用其自己的 TransactionScope 以及所有可能的参数(抑制等),但也有帮助。
【问题讨论】:
-
您能否进一步澄清数据类是“每个使用单独的 DataContext”还是“共享单个 DataContext”。您的“每个 DataContext 的一个实例”不够具体......
标签: .net stored-procedures entity-framework-4