2010-01-07 4 views
0

J'utilise EntityFramework. J'ai un objet "Application" (qui a un champ certificateReasonID) qui peut avoir un ou zéro CertificateReasons - donc il y a une relation avec la table "CertificateReason", et visuellement sur le diagramme edmx nous ne voyons pas le champ certificateReasonTypeID.MVC un à zéro l'insertion ne pas mettre à jour

Lorsque je mets à jour une application, elle INSÉRERa un nouveau CertificateReason et UPDATES Application.certificateReasonTypeID au nouvel ID - au lieu de mettre à jour Application.certificateReasonTypeID vers l'ID sélectionné.

L'objet CertificateReason est dans un état ajouté (techniquement correct). Le code ASPX est

<%foreach (var certReason in Model.CertificateReasons)     
        { %> 
         <li> 
         <%= Html.RadioButton("CertificateReason.id", certReason.id)%> 
         <!-- only because it is adding when it shouldn't -we have to set the other non null values(i.e. not id) in the object else it will fail when it tries to save--> 
          <input type="hidden" value="<%= certReason.meaning %>" name="CertificateReason.meaning"/> 
          <input type="hidden" value="<%= certReason.effectiveFrom %>" name="CertificateReason.effectiveFrom"/> 
          <input type="hidden" value="<%= certReason.createdWhen %>" name="CertificateReason.createdWhen"/> 
         <label for="certificateReasonTypeID<%=certReason.meaning%>"><%=certReason.meaning%></label> 
         </li> 
       <%}%> 

Le code de mise à jour est

public ActionResult Edit(int id, FormCollection collection, ApplicationViewModel model) 
{ 
    var appToUpdate = OMF.Application.First(m => m.id == id); 
    UpdateModel(movieToUpdate, collection.ToValueProvider()); 
    if (ModelState.IsValid) 
    { 

      OMF.ApplyPropertyChanges(movieToUpdate.EntityKey.EntitySetName, appToUpdate); 
      OMF.SaveChanges(); 
     } 
} 

Merci

Répondre

0

réponse était de transmettre le modèle d'application dans le poste d'édition - a dû mettre un champ caché sur la forme pour la objet à remplir correctement) et m'assurer que l'objet Application n'était pas un var. Impossible d'utiliser le ModelState.IsValid comme toujours false, mais met à jour correctement les inserts. L'autre point était de faire un .Include ("CertificateReasons") sur le get.

publique ActionResult Edit (application d'application, collection FormCollection) {

 Application movieToEdit = OMF.GetApplication(app.id);   
     if(app.CertificateReason != null) 
      movieToEdit.CertificateReason = OMF.CertificateReason.First(d => d.id == app.CertificateReason.id); 
     TryUpdateModel(movieToEdit); 

     //if (ModelState.IsValid) --can't use this 
     // { 
      OMF.SaveChanges(); 
     // } 
     return RedirectToAction("Edit", app.id); 

    } 
Questions connexes