none
¿Como puedo restar valores entre dos tablas? c# RRS feed

  • Pregunta

  • Me gustaría saber como puedo restar la cantidad que tengo de stock almacenada en la db.

    estos son mis managers.

    public IQueryable<T> GetAll() { return Context.Set<T>(); }

      /// <summary>
            /// Metodo que retorna todos productos creados
            /// </summary>
            /// <param name="ClientID">Identificador de usuarios</param>
            /// <returns>Todas los productos del usuario</returns>
            public ShoppingCart GetbyClientID(String client_id)
            {
                return Context.Set<ShoppingCart>().Where(e => e.Client_Id == client_id).FirstOrDefault();
            }

     /// <summary>
            /// Ibtiene productos con sus nombres de productos.
            /// </summary>
            /// <param name="id">Identificador del Producto</param>
            /// <returns>Producto con sus nombres si existe o null en caso de no existir</returns>
            public Product GetbyIdAnProduct (int id)
            {
                return Context.Set<Product>().Where(i => i.Id == id).SingleOrDefault();
            } 

    Tengo dos clases una de carrito otra de productos en la de productos estan las cantidades de stock y en el carrito las cantidades añadidas del producto. solo obtengo un error de que hay un datareader abierto.

    Como podría hacer la resta entre las dos tablas?

    int orderId = orderId = orderm.Product_Id;
                var cart = shopingCartManager.GetAll();
                var AllProducts = managerProduct.GetAll();
    
                foreach (var item in cart)
                {
                    int id = item.Product_Id;
    
                    foreach (var product in AllProducts)
                    {
                        if (product.Id == id)
                        {
    
                            product.CurrentStock = product.CurrentStock - Convert.ToInt32(item.Quantity);
                            context.Set<Product>().Attach(product);
                            context.Entry(product).State = EntityState.Modified;
    
    
    
                        }
    
                    }
                    context.SaveChanges();

    miércoles, 23 de mayo de 2018 14:16

Respuestas

  • Normalmente no es una operación que se haga en el servidor web (si es aplicación web), o cliente (si es un cliente en Windows Forms o similar). ¿Por qué?  Porque normalmente una tienda virtual atiende múltiples clientes.  Si 2 clientes compran el mismo producto a la vez, hacer el cálculo localmente podría terminar en sobrevender un producto.  Es un problema de concurrencia de usuarios.

    Entonces normalmente este es un trabajo para el motor de base de datos.  Normalmente todos los motores como SQL Server y Oracle tienen el concepto de transacción.  Eso es lo que necesita:  Reservar el producto y restar del inventario todo en una transacción.

    Le recomiendo entonces buscar información acerca del tema.  Encontrará múltiples ejemplos en la web de cómo hacer un procedimiento almacenado para que reduzca el inventario conforme usuarios compran productos.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    jueves, 24 de mayo de 2018 9:49
    Moderador