Я использую 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.
Дело в том, что мне нужно выполнить обе эти операции в одной транзакции, и я не могу использовать обходной путь, предложенный в Не могу ли я вызвать хранимую процедуру из Entity Framework внутри области транзакции? ( ado.net использует собственное соединение)
Кто-нибудь знает, как обернуть DataContext.ExecuteFunction <> () в транзакции?
P.S. Я пытался обернуть ExecuteFunction в свою собственную транзакцию с собственным TransactionScope со всеми возможными параметрами (Supress и т. Д.), Но ничего не помогло.