【问题标题】:Update Field with Linq in MVC在 MVC 中使用 Linq 更新字段
【发布时间】:2017-10-10 19:45:33
【问题描述】:

我正在 MVC 中开发一个用于仓库管理的应用程序,我必须更新我的库存表,特别是 Stock 字段,当我收到需要增加 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);
        }
     }    

对不起我的英语,对我有帮助吗?

【问题讨论】:

  • 您遇到了什么具体问题?

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


【解决方案1】:

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

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

            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 版本,以便我更新我的答案。

【讨论】:

  • 然后你必须使用 Attach 方法,检查这些链接EF5 和这个SO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
相关资源
最近更新 更多