在MVC 3应用程序中更新模型子集合?

时间:2011-02-25 15:06:26

标签: asp.net entity-framework asp.net-mvc-3 updatemodel

这是一个困扰我一段时间的大问题的一部分(详见"EntityCollection already initialized" error with entity as model in Asp.Net MVC?)。

但是我找到了一个网站,其中有一个人遇到过类似的问题,显然已经解决了这个问题(见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确实使用更改的属性进行更新,但这些值不会保存到Consultant对象上的_repository.Save()数据库中,即使modelProgram对象是咨询顾问的程序对象...我做错了什么?

如果不清楚的话,我正在使用实体框架。

(顺便说一句,如果有人对上一个问题和整个图片有任何意见,那也是受欢迎的,它仍然没有得到解决)。

请帮助,我对MVC失去信心,我最近对此感到非常兴奋......

更新:这里显然有一个错误:UpdateModel实际上没有做任何更新,我刚刚为modelProgram引用了一个不同的对象(viewmodel中的那个),所以当然它有正确的属性值。我仍然想知道如何实现这个目标......

1 个答案:

答案 0 :(得分:0)

尝试在for循环中移动_repository.Save()。

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

修改

尝试输入{}

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