Uso de Entity Framework 4 y cumplir con el siguiente problema con la ejecución del procedimiento almacenado en la transacción ambiental. Aquí está el código:Llamar procedimiento almacenado dentro de TransactionScope en Entity Framework
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 y FeeDA son datos clases de acceso que utiliza una instancia de DataContext para cada uno. Método
- _storedProcedureDA.UpdateOrderRequest() es sólo envoltura de bajo
Context.ExecuteFunction<..>("AddOrderRequest",...)
feeDA.Save()
agrega entidad en el repositorio y llamaContext.SaveChanges()
- Cuando i tratar de hacer esta llamada, i la captura siguiente excepción:
The transaction operation cannot be performed because there are pending requests working on this transaction.
El punto es que necesito hacer ambas operaciones en una transacción y no puedo usar la solución sugerida en Can't I call a stored procedure from Entity Framework inside a transaction scope? (ado.net usando su propia conexión) ¿Alguien sabe cómo ajustar DataContext.ExecuteFunction <>() en la transacción?
P.S. Intenté ajustar ExecuteFunction en su propia transacción con su propio TransactionScope con todos los parámetros posibles (Supress, etc.), pero ayudó el hothing.
Podría aclarar si las clases de datos "cada una usa un DataContext por separado" o "compartir un solo DataContext". Su "única instancia de DataContext para cada uno" no es lo suficientemente específica ... –