2016-06-14 2 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 properities nAttributeID & nCompanyProductID를 db.SaveChanges();가 될 때 이전 값으로 업데이트합니다. 오류 "Store update, insert 또는 delete 문이 예기치 않은 행 수 (0)에 영향을 미쳤습니다. 엔티티가로드 된 후 엔티티가 수정되거나 삭제되었을 수 있습니다."ObjectStateManager 항목을 새로 고칩니다. "

나는 구글에 그것을 확인하고 db.Refresh(RefreshMode.ClientWins,tblattributValMapper );

같은 몇 가지 솔루션을 적용하지만 나에게 도움이되지 않습니다.

저는이 프로젝트에서 일하는 한 명의 개발자로, 엔티티는 다른 곳에서 업데이트하지 않으므로 기본 키 값을 확인하고 모델을 통과합니다. 누구든지 내가 실수를 저지르고있는 아이디어가있을 수 있습니다. 첨부 된 스크린 샷을 참조하십시오.

도움을 주시면 감사하겠습니다.

답변

0

다음 코드를 사용하여 문제를 해결했습니다. 그것은 나를 위해 업데이트 모드에서 작동합니다.

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

감사합니다.