这是一个困扰我一段时间的大问题的一部分(详见"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中的那个),所以当然它有正确的属性值。我仍然想知道如何实现这个目标......
答案 0 :(得分:0)
尝试在for循环中移动_repository.Save()。
你的内心是否正确?当modelProgram为null时,您正在运行UpdateModel(null)。这可能会崩溃并解释为什么没有任何东西得到保存。
修改强>
尝试输入{}
if (modelProgram == null)
{
_repository.AddProgram(formProgram);
}
else
{
modelProgram = formProgram;
UpdateModel(modelProgram);
}