2009-09-03 7 views
0

J'ai mis en place une couche de service dans mon application comme: http://www.asp.net/learn/mvc/tutorial-38-cs.aspxValidation avec une couche de service, comment mettre à jour une entité

(j'utilise Linq2SQL). Maintenant j'ai du mal à implémenter l'Edit ActionResult. Dans le CreateResult Create (Post), je prends la méthode de service:

if (_service.CreateMovie(movie)) 
{ 
    return RedirectToAction("Details", new { id = movie.ID }); 
} 
else 
{ 
    return View(movie); 
} 

C'est bon. Maintenant, mon problème dans l'Edit ActionResult est: comment puis-je implémenter la mise à jour d'une entité?

Dans le référentiel je suit la méthode de mise à jour:

public bool UpdateMovie(Film movieToUpdate) 
{ 
    try 
    { 
     _db.SubmitChanges(); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

Le service appelle alors le référentiel. Mais les modifications apportées dans le formulaire ne sont pas "envoyées" au modèle, donc l'entité n'a pas été mise à jour par les nouvelles valeurs.

Je pourrais appeler "UpdateModel" dans le contrôleur, mais je dois aussi appeler le Validate dans le Service. Mais alors la logique de validation n'est plus dans le service que dans le contrôleur.

J'espère que vous comprenez ma question.

Répondre

0

Vous devrez d'abord récupérer le film nouvellement inséré pour que L2S le sache. Ensuite, appliquez les modifications apportées à MovieToUpdate par rapport à cet objet film nouvellement récupéré et cela permettra de conserver les modifications. Souvenez-vous que vous voulez appliquer SaveChanges au même contexte que pour le film, sans quoi L2S ne saura pas quoi faire.

0

Je n'ai trouvé aucune méthode pour mettre à jour le modèle, sans validation de type basique. J'ai donc implémenté UpdateModel et un DefaultBinderMessage personnalisé. Pour le moment, cela est suffisant pour ma demande. Ailleurs, j'ai pu implémenter l'interface d'erreur pour effectuer toutes les validations avec la couche de service.

Questions connexes