0

いくつかの在庫値を更新する次のコードがあります...

private static void UpdateInventory(int prodId, int qty)
    {
        using (var context = new uStore7_1Entities())
        {
            //Get the catalogNo and ProductUnitID of the product passed in so we can find all identical products that might just be boxed differently
            var currProdItem = context.Products.Where(c => c.ProductID.Equals(prodId))
                                       .Select(c => new {c.CatalogNo, c.ProductUnitID}).FirstOrDefault();

            //Get the units per box factor for calculating total product ordered
            var prodIdAmount =
                context.ProductUnits.Where(pa => pa.ProductUnitID.Equals(currProdItem.ProductUnitID))
                       .Select(pa => pa.Amount)
                       .FirstOrDefault();

            //Calculate the total number of units for this item
            var prodUnits = qty*prodIdAmount;

            //Get the entire list of products with the specified catalog number excluding the product passed in
            var uStoreProducts =
                context.Products.Where(p => p.CatalogNo.Equals(currProdItem.CatalogNo) && !p.ProductID.Equals(prodId))
                       .Select(p => p.ProductID);


            //Loop through each product in the uStoreProductsList
            foreach (var uStoreProduct in uStoreProducts)
            {
                var currentProduct = uStoreProduct;

                //Get the current product's ProductUnitId to get the 'pieces' per "box"
                var currentUnitId =
                    context.Products.Where(u => u.ProductID.Equals(currentProduct))
                           .Select(u => u.ProductUnitID)
                           .FirstOrDefault();

                //Use the ProductUnitId to get the "Amount" from the ProductUnits table.
                var inventoryFactor =
                    context.ProductUnits.Where(i => i.ProductUnitID.Equals(currentUnitId))
                           .Select(i => i.Amount)
                           .FirstOrDefault();

                //Divide the quantity passed 
                var qtyInUnits = prodUnits/inventoryFactor;

                var inventory =
                    context.ProductInventories.Where(pi => pi.ProductID.Equals(currentProduct))
                           .Select(pi => pi.InventoryQuantity)
                           .FirstOrDefault();

                /*var inventory = (from i in context.ProductInventories
                                where i.ProductID == currentProduct
                                select i).FirstOrDefault();
                */


                if (inventory != null)
                {
                    var newinv = inventory - qtyInUnits;
                    inventory = newinv;
                    //context.SaveChanges();
                }
            }
            context.SaveChanges();

        }

    }

SaveChanges()何も更新していないようです。デバッグしたところ、在庫の値が必要な値に変更されましたが、何らかの理由で更新されていません。ループ内とループ外の両方で試しましたが、どちらも変更はありません。何か案は?ここで何が欠けていますか?

4

2 に答える 2

2

あなたcodeは何も更新しません。エンティティを収集し、ローカル変数に計算値を割り当てるだけです。しかし、実際にはpropertyの の を変更することはありませんentities

エンティティのプロパティを選択して変数に保存し、この変数の値を置き換えることはできないことに注意してください。エンティティを変更する場合は、エンティティを選択する必要があります。

于 2013-04-09T14:14:44.337 に答える