none
Como evito crear un registro en la base cuando esta con virtual RRS feed

  • Pregunta

  • Buenas tardes

    Tengo una pregunta, nunca había hecho un proyecto tan grande, pero ahora lo estoy haciendo y me topo con un detalle.

    Explico mi caso. Tengo un inventario, el cual un cliente hace una compra de productos. El caso es que le permito al administrador modificar el precio que esta guardado en la base en el momento de la venta, en la página para hacer la venta (ver foto 1 y foto 2) . Osea en un caso que el cliente digamos, el precio esta en 10 dolares pero el cliente le parece caro y en ese momento quiere pagar 8 y el administrador lo acepta entonces puede modificar en ese momento en la lista de 10 a 8 sin modificar la base (osea el precio solo para esa venta). En la venta y factura queda guardado con el precio de 8 pero en la base baja el stock de la salida del producto pero el precio siguen en 10. El problema es en la venta como que me detecta que es un producto nuevo y me crea un nuevo producto. Osea tengo, un "BANDA LG/SAMSUNG 21,6 ALTERNA" en 10 dolares, cuando hace una venta, en el momento de guardar la factura, como en la Session["venta"] están los producto pero en el producto del "BANDA LG/SAMSUNG 21,6 ALTERNA"  esta en 8, me crea en la base un "BANDA LG/SAMSUNG 21,6 ALTERNA" de 10 dolares y 1 "BANDA LG/SAMSUNG 21,6 ALTERNA" de 8, estaba evitando hacer eso justo un paso antes de guardar la venta y ponía venta.producto = null, así se solucionaba el problema y no crea el nuevo producto en la base pero el problema es que en el crystal report (impresión) me sale con el valor de la base 10 y no con 8 (el precio modificado por mi que le hice el descuento). Como hago para evitar que cada ves que registro una venta como lo tengo en la clase virtual Producto Producto esta registrando como si guardara conjuntamente con la venta un producto nuevo? creí que se usaba solo para traer en las consultas con el .include no para guardar cada vez que se guarda una venta.

    Muchas gracias. Mi clase esta así.

     public class Venta
        {
            [Key]
            public int VentaId { get; set; }        
            public int ProductoId { get; set; }
            public virtual Producto Producto { get; set; }
            public int Cantidad { get; set; }
            public double Total { get; set; }
            public int VentaProductoId { get; set; }        
            public string Usuario { get; set; }
            public string NombreComercial { get; set; }
        }

    FOTO 1


    FOTO 2

    FOTO 3

    domingo, 23 de junio de 2019 0:30

Todas las respuestas

  • hola

    Si usas entity framework no deberias crear una nueva instancia de Producto, sino realizar una busqueda de la entidad existente

    O mejor aun no asignes nada en la propiedad producto, solo asigna el ProduductId de esta forma lo relaciona por el id usando el registro existente

    el tema es que si creas un nuev producto usando el "new" al hacer el SaveChanges() creara la entidad como nueva, aunque tenga el id de una existente porque no tiene el tracking

    Si quiere seguir ese camino vas a tener que marcar la entidad

    Working with entity states

    algo como estocontext.Entry(entity).State = EntityState.Unchanged;

    
    

    en este caso la entity sera la instancia de producto indicando que no cambio para que no genere el insert

    por eso te deci que mas facil es solo asignar el ProductId y no la instancia del producto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 24 de junio de 2019 6:26