存储更新,插入或删除语句影响了意外的行数(0),

时间:2016-06-14 12:55:00

标签: c# asp.net-mvc entity-framework updatemodel

希望你做得很好。

请帮我解决这个问题。我在ASP.NET mvc web Application中使用下面的代码。

[HttpPost]
        public ActionResult ProductAddonsAdd(int? id, tblproductattributemapper model, string AllStorechk, int? ddlProduct, int? ddlCompany, string hdCompanyProductID)
        {

            DbTransaction dbTran = null;
            try
            {
                tblproductattributemapper tblattributValMapper = new tblproductattributemapper();
                db.Connection.Open();
                dbTran = db.Connection.BeginTransaction();
                int CompanyProductID = 0;
                if(!string.IsNullOrEmpty(hdCompanyProductID))
                {
                    CompanyProductID=Convert.ToInt32(hdCompanyProductID);
                }
                else
                {CompanyProductID=db.tblcompanyproducts.Where(x => x.nProductID == ddlProduct && x.nCompanyID == ddlCompany).FirstOrDefault().nCompanyProductID;}
                if (id == null)
                {
                    if (db.tblproductattributemappers.Where(x => x.nCompanyProductID == CompanyProductID && x.nAttributeID == model.nAttributeID).Count() != 0)
                    {
                        TempData["Errmsg"] = "Addon value already exist with this product!";
                        return RedirectToAction("ProductAddons");
                    }

                    tblattributValMapper = new tblproductattributemapper();
                    tblattributValMapper.nAttributeID = model.nAttributeID;
                    tblattributValMapper.nCompanyProductID = CompanyProductID;
                    db.AddTotblproductattributemappers(tblattributValMapper);
                }
                else
                {
                    tblattributValMapper = db.tblproductattributemappers.Where(x => x.nMapperID == id).FirstOrDefault();
                    tblattributValMapper.nAttributeID = model.nAttributeID;
                    tblattributValMapper.nCompanyProductID = CompanyProductID;

                }

                db.SaveChanges();    //// Error comes here when it goes into else part(update mode) then executed here
                // deleting objects
                var objmapperdetails = db.tblproductattributemapperdetails.Where(x => x.nMapperID == tblattributValMapper.nMapperID).ToList();
                if (objmapperdetails != null && objmapperdetails.Count() > 0)
                {
                    foreach (var item in objmapperdetails)
                    {
                        db.tblproductattributemapperdetails.DeleteObject(item);
                    }
                }
                string[] arrAllStore = AllStorechk.Split(',');
                tblproductattributemapperdetail detail;
                foreach (var item in arrAllStore)
                {
                    Int64 _id = Convert.ToInt64(item);
                    detail = new tblproductattributemapperdetail();
                    detail.nMapperID = tblattributValMapper.nMapperID;
                    detail.nAttributeValueMasterID = _id;
                    detail.nPrice = db.tblattributevaluemasters.Where(x => x.nAttributeValueMasterID == _id).FirstOrDefault().nPrice;
                    db.AddTotblproductattributemapperdetails(detail);
                }

                db.SaveChanges();
                dbTran.Commit();
                TempData["Successmsg"] = "Saved successfully";
            }
            catch (Exception ex)
            {
                dbTran.Rollback();
                TempData["Errmsg"] = "Failed to save ";
                Common.TrapError(ex.StackTrace, "Attribute/ProductAddons");
            }
            finally
            {
                db.Connection.Close();
            }
            return RedirectToAction("ProductAddons");
        }

当我在编辑模式下打开任何记录并提交而不更改任何内容时;那时它转到else部分并更新实体tblattributValMapper的特性nAttributeID&当db.SaveChanges()时,nCompanyProductID具有较旧的值;执行它Thorwing错误"存储更新,插入或删除语句影响了意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。"

我在google上查看并应用了db.Refresh(RefreshMode.ClientWins,tblattributValMapper );

等解决方案

但它对我没有帮助。

我是这个项目的单一开发人员,所以实体没有从任何其他地方更新,我也检查了主键值,它正在通过模型。 任何人都有任何想法,我在做错误。 请参阅随附的屏幕截图。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

我使用下面的代码解决了这个问题。它在更新模式下对我有用。

  try
  { db.SaveChanges(); }
  catch (OptimisticConcurrencyException)
  {
  db.Refresh(RefreshMode.StoreWins, tblattributValMapper);
  db.SaveChanges();
  }

感谢。