2011-02-25 1 views
1

Cela fait partie d'un problème plus important qui me tourmente depuis un moment maintenant (voir "EntityCollection already initialized" error with entity as model in Asp.Net MVC? pour l'image entière).Mettre à jour la collection enfant modèle dans l'application MVC 3?

Mais j'ai trouvé un site Web avec quelqu'un qui avait fait face à un problème similaire et apparemment résolu pour ses besoins (voir http://codeblog.shawson.co.uk/creating-an-order-order-details-style-form-using-asp-net-mvc2-entity-framework/). Je l'ai essayé, mais j'ai dû faire quelques modifications pour adapter mon code, et les méthodes d'aide fournies par un tutoriel par Steven Sanderson (voir le post précédent).

Je suis très proche il semble, mais pas tout à fait:

 UpdateModel(consultant, "Consultant"); 

     if (vm.Programs != null) //Unnecessary? Can it even be null if it's initialized from the model? 
      for (int i = 0; i < vm.Programs.Count; i++) 
      { 
       Program formProgram = vm.Programs[i]; 
       Program modelProgram = consultant.Programs.SingleOrDefault(x => x.Id == formProgram.Id); 
       if (modelProgram == null) 
        _repository.AddProgram(formProgram); 
       else 
        modelProgram = formProgram; 
       UpdateModel(modelProgram); //Doesn't work. The modelProgram object does get updated with the correct property values, but it isn't saved to the repository... 
      } 
     _repository.Save(); 

Bien que cela suit l'exemple sur le site ci-dessus, et la modelProgram ne soit mis à jour avec les propriétés modifiées, ces valeurs ne sont pas enregistrées la base de données sur _repository.Save() sur l'objet Consultant, même si l'objet modelProgram est une référence à un objet Program sur le consultant ... Qu'est-ce que je fais de mal? J'utilise Entity Framework à propos, si ce n'est pas clair.

(BTW, si quelqu'un a des commentaires sur la question précédente et l'ensemble de l'image, ce serait également la bienvenue, il n'est toujours pas résolu).

S'il vous plaît aider, je suis en train de perdre la foi dans MVC, que je donc récemment été tellement enthousiasmés par ...

MISE À JOUR: Il y avait apparemment une erreur ici: UpdateModel n'a pas fait en fait une mise à jour, je avait juste référencé un objet différent (celui dans le viewmodel) pour le modelProgram, donc bien sûr il avait les bonnes valeurs de propriété. Je veux toujours des idées pour y arriver ...

+0

@everyone: Je fini par essayer quelque chose d'autre, avec AutoMapper. J'ai créé une nouvelle question pour cela: http://stackoverflow.com/questions/5126603/trying-to-use-automapper-for-model-with-child-collections-getting-null-error-in. En fait, je l'ai fait fonctionner, mais je ne suis pas vraiment satisfait du code, donc si quelqu'un a une meilleure façon de le faire que je l'ai fait dans ma propre réponse, je vais donner crédit à la fois pour cette question! – Anders

Répondre

0

Essayez de déplacer le _repository.Save() dans la boucle for.

Votre intérieur est-il correct? Vous exécutez UpdateModel (null) lorsque modelProgram est null. Cela pourrait planter et expliquer pourquoi rien n'est sauvé.

Modifier

Essayez de mettre en {}

  if (modelProgram == null) 
       { 
       _repository.AddProgram(formProgram); 
       } 
      else      
       { 
       modelProgram = formProgram;     
       UpdateModel(modelProgram); 
       } 
+0

Cela ne fait pas de différence. Voir ma mise à jour ci-dessus - UpdateModel n'a rien fait du tout, et modelProgram = formProgram était complètement faux ... Donc je suis toujours perplexe. – Anders

+0

N'a pas fait de différence non plus, semble que la chose était erronée par rapport à la structure dans la vue. Maintenant, en utilisant AutoMapper, voir le commentaire ci-dessus. – Anders

Questions connexes