2011-02-25 39 views
1

这是一个困扰了我一阵子的大问题的一部分(整个图片见"EntityCollection already initialized" error with entity as model in Asp.Net MVC?)。在MVC 3应用程序中更新模型子集合?

但是,我发现一个网站有人遇到类似的问题,并显然解决了他的需求(见http://codeblog.shawson.co.uk/creating-an-order-order-details-style-form-using-asp-net-mvc2-entity-framework/)。我尝试过,但必须做一些修改以适应我的代码,以及Steven Sanderson的教程提供的帮助器方法(请参阅上一篇文章)。

我很近,似乎,但并不完全:

 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(); 

尽管它遵循了在网站上上面的例子,和modelProgram并获得与改变的属性更新,这些值不会保存到尽管modelProgram对象是对Consultant上Program对象的引用,但是我在做什么错误?

我正在使用实体框架的方式,如果它不清楚。 (顺便说一下,如果有人对上一个问题和整个图片有任何意见,那也是值得欢迎的,但它仍然没有解决)。

请帮帮忙,我失去了信心,MVC,这是我最近才这么兴奋......

UPDATE:有显然这里的错误:的UpdateModel实际上并没有做任何更新,我刚刚为modelProgram引用了另一个对象(视图模型中的一个),所以它当然具有正确的属性值。我仍然想要如何实现这个想法虽然...

+0

@everyone:最后我想别的东西,与AutoMapper。我为它创建了一个新问题:http://stackoverflow.com/questions/5126603/trying-to-use-automapper-for-model-with-child-collections-getting-null-error-in。我确实做到了,但我对代码并不满意,所以如果有人比我自己在那里提供的答案有更好的方式,那么我会把这个和那个问题都归功于它! – Anders 2011-02-27 09:03:09

回答

0

尝试移动for循环内的_repository.Save()。

你的内心是否正确?当modelProgram为null时,您正在运行UpdateModel(null)。这可能会崩溃并解释为什么没有保存。

编辑

尝试把在{}

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

它没有区别。看到我上面的更新 - UpdateModel根本没有做任何事情,和modelProgram = formProgram是明显错误的...所以我仍然难住。 – Anders 2011-02-25 22:45:12

+0

也没有任何区别,看起来整个事情在视图结构方面是错误的。现在使用AutoMapper,请参阅上面的注释。 – Anders 2011-02-27 09:01:24