2014-05-07 5 views
0

J'essaie de mettre à jour l'entité, mais il me donne une erreur comme "Mettre à jour le magasin, insérer ou supprimer une instruction affecté un nombre inattendu de lignes (0) .Les entités peuvent avoir été modifiées ou supprimé depuis le chargement des entités. Actualiser les entrées ObjectStateManager. " J'ai cherché sur internet mais je n'ai trouvé aucune solution appropriée. Je partage mon code:Impossible de mettre à jour le modèle dans MVC 4

Méthode d'action:

[HttpPost, ValidateAntiForgeryToken] 
     public async Task<ActionResult> EditCustomTicket([Bind(Include = @"TicketDetailId,GenericOrderId,PartId,Quantity,CustomerPrice, 
                      Status,RowVersion,PersonID,Notes,Manufacturer,DateCode, 
                      Package,CustomQuantity,BuyingPrice,CustomPrice,LTDays, 
                      Description")] TicketDetail orderdetail, int? id, string request) 
     { 
      TryUpdateModel(orderdetail); 
      try 
      { 

       if (ModelState.IsValid) 
       { 
        db.TicketDetails.Attach(orderdetail); 
        var manager = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager; 

        manager.ChangeObjectState(orderdetail, EntityState.Modified); 

        await db.SaveChangesAsync(); 
        return RedirectToAction("Details", new { id = id }); 
       } 

      } 

      catch (Exception ex) 
      { 
       ModelState.AddModelError("", ex.Message); 
       TempData["Error"] = string.Format(ex.Message + "\n" + ex.Source); 
       return RedirectToAction("Details", new { id = id }); 
      } 
      return View(orderdetail); 
     } 

est la vue:

<div> 
       @foreach (var item in Model) 
       { 
        <form method="post" action="@Url.Action("EditCustomTicket")"> 

         @Html.AntiForgeryToken() 
         @Html.ValidationSummary(true) 

         @Html.HiddenFor(model => item.TicketDetailId) 
         @Html.HiddenFor(model => item.GenericOrderId) 
         @Html.HiddenFor(model => item.Notes) 
         @Html.HiddenFor(model => item.Status) 
         @Html.HiddenFor(model => item.PersonID) 
         @Html.HiddenFor(model => item.RowVersion) 
         @Html.HiddenFor(model => item.Quantity) 
         @Html.HiddenFor(model => item.CustomerPrice) 
         @Html.HiddenFor(model => item.PartId) 


         <div class="form-group float"> 
          @Html.LabelFor(model => item.Part.PartNumber, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.DisplayFor(modelitem => item.Part.PartNumber) 
          </div> 
         </div> 

         <div class="form-group float"> 
          @Html.LabelFor(model => item.Manufacturer, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.Manufacturer, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.Manufacturer) 
          </div> 
         </div> 
         <div class="form-group float"> 
          @Html.LabelFor(model => item.DateCode, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.DateCode, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.DateCode) 
          </div> 
         </div> 

         <div class="form-group float"> 
          @Html.LabelFor(model => item.Package, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.Package, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.Package) 
          </div> 
         </div> 
         <div class="form-group float"> 
          @Html.LabelFor(model => item.Quantity, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.DisplayFor(modelitem => item.Quantity) 
          </div> 
         </div> 


         <div class="form-group float"> 
          @Html.LabelFor(model => item.Package, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.Package, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.Package) 
          </div> 
         </div> 

         <div class="form-group float"> 
          @Html.LabelFor(model => item.BuyingPrice, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.BuyingPrice, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.BuyingPrice) 
          </div> 
         </div> 


         <span id="bpusd"></span> 

         <div class="form-group float"> 
          @Html.LabelFor(model => item.CustomPrice, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.CustomPrice, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.CustomPrice) 
          </div> 
         </div> 
         <span id="amtusd"></span> 
         <div class="form-group float"> 
          @Html.LabelFor(model => item.LTDays, new { @class = "control-label col-md-2 lab" }) 
          <div class="col-md-10"> 
           @Html.EditorFor(model => item.LTDays, new { htmlattributes = new { @class = "textbox" } }) 
           @Html.ValidationMessageFor(model => item.LTDays) 
          </div> 
         </div> 

         <br /> 


         <input class="btn green butt" value="Send Quote" type="submit" /> 
         <input class="btn yellow butt" value="Send Performa INV." type="submit" /> 
         <input class="btn blue butt" value="Send Invoice" type="submit" /> 



         <hr /> 
        </form> 
       } 
      </div> 

est une vue partielle. s'il te plaît, guide-moi avec ça.

+0

L'exception signifie probablement que la propriété clé de 'orderdetail' que vous attachez (' orderdetail.TicketDetailId' ou la clé même composite?) N'a pas la valeur correcte d'un enregistrement existant dans la base de données. Vous devriez étudier cela dans le débogueur. – Slauma

+0

@Slauma il a la valeur correcte, j'ai vérifié cela dans le débogueur. comment puis-je résoudre ce problème? J'ai ajouté une propriété de version de ligne pour éviter les conflits d'accès simultanés optimistes – Anony

+0

Et la propriété RowVersion est-elle correctement définie avant de vous connecter? Qu'avez-vous utilisé comme RowVersion? Un tableau d'octets? Ou quelque chose de personnalisé? – Slauma

Répondre

0

Cela peut se produire lorsque les données ne sont pas modifiées ou que vous n'incluez pas le champ de clé primaire.

+0

j'ai inclus le champ de clé primaire, j'ai mis à jour la question s'il vous plaît vérifier – Anony

0

Vous n'êtes pas attaché à une entité existante.

Vous devez spécifier l'entité avec laquelle vous travaillez avant de pouvoir y joindre les détails du ticket, par exemple.

var existingTicket = db.TicketDetails.Find(Id); 

existingTicket.Attach(orderdetail); 
0

Essayez de supprimer l'attribut Bind dans votre méthode

EditCustomTicket

. Vous pouvez essayer autre chose pour gérer le problème d'attribution de masse.

Questions connexes