Обновить модель дочерней коллекции в приложении MVC 3? - PullRequest
1 голос
/ 25 февраля 2011

Это часть более крупной проблемы, которая мучает меня некоторое время (см. Ошибка «EntityCollection уже инициализирована» с сущностью в качестве модели в Asp.Net MVC? для всей картинки).

Но я нашел веб-сайт с кем-то, кто столкнулся с подобной проблемой и, видимо, решил ее для своих нужд (см. http://codeblog.shawson.co.uk/creating-an-order-order-details-style-form-using-asp-net-mvc2-entity-framework/). Я попробовал это, но мне пришлось внести некоторые изменения, чтобы соответствовать моему коду и вспомогательным методам, предоставленным учебным пособием Стивена Сандерсона (см. Предыдущий пост).

Кажется, я очень близок, но не совсем:

        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 обновляется с измененными свойствами, эти значения не сохраняются в базе данных в _repository.Save () объекта Консультанта, даже если объект modelProgram является ссылка на объект Программы у Консультанта ... Что я делаю не так?

Кстати, я использую Entity Framework, если неясно.

(Кстати, если у кого-то есть какие-либо замечания по предыдущему вопросу и всей картине, это также приветствуется, это все еще не решено).

Пожалуйста, помогите, я теряю веру в MVC, которой я так недавно восхищался ...

ОБНОВЛЕНИЕ: Здесь, по-видимому, произошла ошибка: UpdateModel на самом деле не обновлял, я только что ссылался на другой объект (тот, что в viewmodel) для modelProgram, поэтому, конечно, он имел правильные значения свойств. Я все еще хочу идеи о том, как добиться этого, хотя ...

1 Ответ

0 голосов
/ 25 февраля 2011

Попробуйте переместить _repository.Save () внутри цикла for.

Правильно ли ваше внутреннее? Вы используете UpdateModel (null), когда modelProgram имеет значение null. Это может привести к сбою и объяснить, почему ничего не сохраняется.

Редактировать

Попробуйте вставить {}

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