Вызов хранимой процедуры внутри TransactionScope в Entity Framework

Я использую 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();
    }
}
  1. _StoredProceduresDA и FeeDA - это классы доступа к данным, которые используют по одному экземпляру DataContext для каждого.
  2. Метод _storedProcedureDA.UpdateOrderRequest () - это просто оболочка под Context.ExecuteFunction <..> ("AddOrderRequest", ...)
  3. feeDA.Save () добавляет объект в Репозиторий и вызывает Context.SaveChanges ()
  4. Когда я пытаюсь выполнить этот вызов, я обнаружил следующее исключение: Операция транзакции не может быть выполнена, потому что с этой транзакцией работают ожидающие запросы.

Дело в том, что я необходимо выполнить обе эти операции в одной транзакции, и я не могу использовать обходной путь, предложенный в . Разве я не могу вызвать хранимую процедуру из Entity Framework внутри области транзакции? (ado.net использует собственное соединение) Кто-нибудь знает, как обернуть DataContext.ExecuteFunction () в транзакцию?

PS Я пытался обернуть ExecuteFunction в ее собственную транзакцию с ее собственным TransactionScope со всеми возможными параметрами (Supress и т. Д.), Но это помогло.

5
задан Community 23 May 2017 в 12:01
поделиться