在MVC中使用Linq更新字段

时间:2017-10-10 19:45:34

标签: c# asp.net-mvc linq linq-to-sql

我正在开发一个用于仓库管理的MVC应用程序,我必须更新我的库存表,特别是Stock字段,当我收到我需要增加库存字段的产品时,当我发送产品时我需要打折股票字段,我只能添加一个新行),我想要的是更新行(仅限现场库存)附加照片Table Inventario

我的控制器[发布]:

    //CREAMOS/DECLARAMOS LA TRANSACCION
    using (var transaccion = db.Database.BeginTransaction())
    {
        try
        {
            //CARGO LOS DATOS A RECEPCION
            Recepcion recepcion = new Recepcion
            {
                Kn_CodigoProveedor = proveeid,
                Kn_CodigoBodega = bodeid,
                UserId = usuaid,
                f_Ingreso = fingreso,
                f_Factura = ffactura,
                f_Guia = fguia,
                n_Guia = nguia,
                n_Factura = nfactura,
                n_OrdenCompra = nordencompra,                        
            };

            db.Recepcions.Add(recepcion);
            db.SaveChanges();

            //RECUPERO EL ULTIMO ID QUE GENERO (ULTIMA RECEPCION)
            ultimarecepcionid = db.Recepcions.ToList().Select(r => r.Kn_CodigoRecepcion).Max();

           //CICLO QUE GUARDA CADA ELEMENTO DEL DETALLE
            foreach (ProductosRecepcion item in recepcionview.ProductosList)
            { 
                var detalle = new RecepcionDetalle()
                {               
                    Kn_CodigoRecepcion = ultimarecepcionid,
                    Kn_CodigoProducto = item.Kn_CodigoProducto,
                    Foto = item.Foto,
                    d_Cantidad = item.d_Cantidad,
                    Precio_Unitario = item.Precio_Unitario,                           
                };                                               

                //CARGO EL OBJETO AL DETALLE
                db.RecepcionDetalles.Add(detalle);

                foreach (ProductosRecepcion item1 in recepcionview.ProductosList)
                {
                    //RECUPERO ULTIMO STOCK (TABLA INVENTARIO)
                    UltimoStock = db.Inventarios.Where(b => b.Kn_CodigoBodega == bodeid).Where(p => p.Kn_CodigoProducto == item.Kn_CodigoProducto).ToList().Select(p => p.Stock).Max();

                }

                //ARMO EL OBJETO PARA ACTULIZAR MI TABLA INVENTARIO
                var stock = new Inventario()
                {

                    Kn_CodigoProducto = item.Kn_CodigoProducto,
                    Kn_CodigoBodega = bodeid,
                    Stock = (detalle.d_Cantidad + UltimoStock),
                };

                //GUARDO
                db.Inventarios.Add(stock);
            }

            db.SaveChanges();

            //CONFIRMAMOS EXITO DE TRANSACCION
            transaccion.Commit();
        }

        catch (Exception ex)
        {
            //CONFIRMAMOS FRACASO DE TRANSACCION
            transaccion.Rollback();
            ViewBag.Error = "ERROR: " + ex.Message;

            return View(recepcionview);
        }
     }    

对不起我的英文,对我有什么帮助?

1 个答案:

答案 0 :(得分:0)

根据我的理解,您必须通过增加或减少“库存”列来更新库存水平。

但是,您要在代码中插入新记录:

            var stock = new Inventario()
            {

                Kn_CodigoProducto = item.Kn_CodigoProducto,
                Kn_CodigoBodega = bodeid,
                Stock = (detalle.d_Cantidad + UltimoStock),
            };

            //GUARDO
            db.Inventarios.Add(stock);

这是你应该做的:

  • 获取要更新的记录(通过检索)

    var stockItem = db.Inventarios(s => s.ReplaceBYYourField == replaceBYYourValue).FirstOrDefault();

  • 通过增加或减少股票价值来更新记录:

    stockItem.Stock + = 1;

  • 保存更改:

    db.Entry(stockItem).State = System.Data.Entity.EntityState.Modified;
        db.SaveChanges();

代码遵循EF版本4.在较新版本中,语法可能不同,但在我提到的步骤中应用相同的逻辑。让我知道您正在使用哪个EF版本,以便我可以更新我的答案。