2017-10-10 78 views
1

我正在開發一個用於倉庫管理的MVC應用程序,當我收到產品時需要更新我的庫存表,特別是庫存字段,當我需要增加庫存字段以及發送產品時我需要打折的股票領域,我只能夠添加新行)和我要的是更新的行(僅域Stock)所附照片Table Inventario在MVC中使用Linq更新字段

我的控制器[發佈]:

//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); 
     } 
    }  

對不起,我的英語,對我有幫助嗎?

+0

你有什麼具體問題? – Shyju

回答

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版本,這樣我就可以更新我的答案。

+0

不適用語法...必須使用我的EF版本....我的版本是5 @編碼 –

+0

然後,您必須使用Attach方法,檢查這些鏈接[EF5](https://msdn.microsoft.com /en-us/library/jj592676(v=vs.113).aspx)和這[SO](https://stackoverflow.com/questions/15336248/entity-framework-5-updating-a-record) – Coding