2009-05-28 3 views
1

J'utilise NHibernate pour la première fois et j'ai du mal à le faire. Sur la première page, je commence un formulaire. Je veux enregistrer et naviguer vers la page deux. Comment puis-je mettre à jour mon objet RequestForm avec l'ID de la ligne nouvellement insérée? Il est toujours 0 lorsque j'appelle la redirection, bien que les données aient été conservées dans la base de données.NHibernate: besoin de mettre à jour l'ID d'objet avec @@ identity après l'insertion

Voici mon code du contrôleur:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult New(RequestForm form) 
    { 
     // contract 
     if (form == null) 
     { 
      throw new ArgumentException("Cannot be null", "form"); 
     } 

     // validate the form 
     form.Validate(ModelState); 

     // if valid, save & continue 
     if (ModelState.IsValid) 
     { 
      var request = new Request(); 
      form.Update(request); 
      repository.Save(request); 
      return RedirectToAction("Edit", "Request", new {id = form.ID}); 
     } 

     // if not valid, return new form 
     return View("New", form); 
    } 

Voici le code du référentiel:

public void Save(T entity) 
    { 
     using (ISession session = GetSession()) 
     using (ITransaction transaction = session.BeginTransaction()) 
     { 
      session.SaveOrUpdate(entity); 
      transaction.Commit(); 
     } 
    } 

Voici la zone concernée du fichier de mappage:

<class 
    name="Request" 
    table="Data_Requests" 
    dynamic-update="true"> 

<id 
    name="Id" 
    type="Int32" 
    access="property" 
    column="RequestId" 
    unsaved-value="0"> 
    <generator class="native"/> 
</id> 

Merci d'avoir lu ma question . Je suis sûr que la réponse est facile une fois que vous savez ce que vous faites :)

Répondre

0

OK - erreur Dumb

return RedirectToAction("Edit", "Request", new {id = form.ID}); 

devrait être

return RedirectToAction("Edit", "Request", new {id = request.ID}); 
0

Avez-vous essayé le réglage <generator class="identity"/>. Il devrait travailler avec natif, mais qui sait ...

+0

ne fonctionne pas. Savez-vous si je dois faire quelque chose pour rafraîchir l'objet? Je pensais que ça arriverait automagiquement ... – Leslie

Questions connexes