2016-06-14 3 views
2

Надеюсь, у вас все хорошо.Операция обновления, вставки или удаления магазина влияет на неожиданное количество строк (0),

Пожалуйста, помогите мне решить эту проблему. Я использую код ниже в веб-приложении ASP.NET mvc.

[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"); 
     } 

Когда я открываю любую запись в режиме редактирования и отправляю, не меняя ничего; в это время он переходит в другую часть и обновляет свойства объекта tblattributValMapper nAttributeID & nCompanyProductID со старыми значениями, когда db.SaveChanges(); было выполнено его толерантность Ошибка «Заявление об обновлении, вставке или удалении Store повлияло на неожиданное количество строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновить записи ObjectStateManager."

проверить его на Google и применил какое-то решение, как db.Refresh(RefreshMode.ClientWins,tblattributValMapper );

, но это не помогает мне.

Я один разработчик, работающий над этим проектом, поэтому сущность не обновляется ни с каким другим местом, я также проверяю значение первичного ключа, оно проходит через модель. Может ли у кого-нибудь идея, в которой я ошибаюсь. См. Прилагаемые скриншоты.

Любая помощь будет очень признательна.

ответ

0

Я исправил проблему, используя приведенный ниже код. он работает для меня в режиме обновления.

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

Спасибо.

Смежные вопросы

 Смежные вопросы