gpt4 book ai didi

.net - 在 Entity Framework 中调用 TransactionScope 内的存储过程

转载 作者:行者123 更新时间:2023-12-04 20:57:11 24 4
gpt4 key购买 nike

我使用 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()将实体添加到存储库并调用 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<>() ?
    附言我试图用它自己的 TransactionScope 和所有可能的参数(抑制等)将 ExecuteFunction 包装在它自己的事务中,但是没有帮助。

    最佳答案

    查看 this other stackoverflow question 中的类似问题,尤其是在答案 #4 中:

    "I Finally found a solution...it seems EF expects the stored proc (imported function) to return a value. so call .FirstOrDefault() on the function when it returns."



    如果这适用于您自己的问题,那么在您调用 Context.ExecuteFunction 的 _storedProcedureDA.UpdateOrderRequest 方法中,获取返回值(可能是 int)并将其返回给调用方法(因此将 UpdateOrderRequest 从 void 更改为 int 或其他返回值类型是)。

    我看到这个问题已经很老了,所以也许你很久以前就解决了它并继续前进?

    关于.net - 在 Entity Framework 中调用 TransactionScope 内的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269818/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com