Código
public bool RegistrarNuevaVenta() { bool noHayExito = true; bool puedeContinuar = true; while (noHayExito && puedeContinuar) { opts.IsolationLevel = System.Transactions.IsolationLevel.Serializable; System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope(TransactionScopeOption.Required, opts); try { venta.Activo = true; CargarDatoGenerales(cx, venta); CargarInventario(cx, venta, View.FechaVentaView); CargarServicios(cx, venta); venta.EstadoInventario = InferirEstadoInventario(); if (View.TipoVentaView == VentasAgregarPresenter.VENTA_RESERVA) { CargarReserva(cx, venta); } if (View.TipoVentaView == VENTA_CONTADO || View.TipoVentaView == VENTA_RESERVA) { CargarPago(cx, venta); venta.EstadoPago = (venta.SaldoBs > 0 ? Cttes.Ventas.Estado.Pago.PENDIENTE : Cttes.Ventas.Estado.Pago.CANCELADO); } if (View.TipoVentaView == VENTA_CREDITO_NORMAL) { CargarPlanPagos(cx, venta); venta.EstadoPago = Cttes.Ventas.Estado.Pago.PENDIENTE; } if (View.TipoVentaView == VENTA_CREDITO_SIMPLE || View.TipoVentaView == VENTA_CREDITO_NORMAL) { //Una venta a crédito no registra ningún pago inicial. venta.SaldoBs = venta.MontoTotalBs; venta.SaldoSus = venta.MontoTotalSus; venta.EstadoPago = Cttes.Ventas.Estado.Pago.PENDIENTE; } cx.Ventas.AddObject(venta); [b]cx.SaveChanges(); //Es aqui donde tarda 6 seg[/b] scope.Complete(); ventaAux = venta; VentaA = venta; noHayExito = false; } catch (InsuficienteStockException ex1) { Mensaje.Instancia.NotificarMensajeProblema(ex1.Message); puedeContinuar = false; } catch (InvalidOperationException ex2) { Mensaje.Instancia.NotificarMensajeProblema(ex2.Message); puedeContinuar = false; } catch (AsegurarCuotaFraccionException ex3) { Mensaje.Instancia.NotificarMensajeProblema(string.Format("Producto: {0}\tDeposito: {1}\nNo existe suficiente stock", ex3.Producto.Nombre, ex3.Deposito.Nombre)); puedeContinuar = false; } catch (Exception ex) { if (Utilidad.EsDeadLock(ex)) { puedeContinuar = true; } else { Mensaje.Instancia.NotificarExcepcion(ex); puedeContinuar = false; } } finally { cx.Dispose(); scope.Dispose(); } }
[MOD]: Utiliza las etiquetas de inserción de código.