Я использую 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();
}
}
Context.ExecuteFunction <..> ("AddOrderRequest", ...)
feeDA.Save ()
добавляет объект в Репозиторий и вызывает Context.SaveChanges ()
Операция транзакции не может быть выполнена, потому что с этой транзакцией работают ожидающие запросы.
Дело в том, что я необходимо выполнить обе эти операции в одной транзакции, и я не могу использовать обходной путь, предложенный в . Разве я не могу вызвать хранимую процедуру из Entity Framework внутри области транзакции? (ado.net использует собственное соединение) Кто-нибудь знает, как обернуть DataContext.ExecuteFunction () в транзакцию?
PS Я пытался обернуть ExecuteFunction в ее собственную транзакцию с ее собственным TransactionScope со всеми возможными параметрами (Supress и т. Д.), Но это помогло.