2017-10-10 4 views
1

MVCで倉庫管理用のアプリケーションを開発しています。在庫フィールドを増やす必要がある製品を受け取ったとき、および製品を送信するときに在庫テーブルを更新する必要があります私は在庫フィールドを割り引く必要がある、私は)新しい行を追加することですし、私が欲しいのは、行(フィールド証券のみ)添付写真Table InventarioMVCの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 stockItItem = 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)とthis [SO](https://stackoverflow.com/questions/15336248/entity-framework-5-updating-a-record) – Coding

関連する問題