Я думаю, что это общая проблема.Я использую несколько подходов:
1) Это мой рекомендуемый подход.Используйте модель представления, которая охватывает только те свойства, которые вы хотите редактировать.Затем это может быть связано напрямую, как вы сейчас пытаетесь сделать.Проблема этого подхода заключается в том, что вам необходимо скопировать свойства из ваших объектов EF и обратно в них.Если присвоение имен непротиворечиво, вы можете использовать копир с немым отражением.Если это не так, или вам нужно пройтись по графику, чтобы скопировать их обратно, то я склоняюсь к тому, чтобы поместить эту пользовательскую логику в класс viewmodel.(Что делает его не просто моделью представления, но ничем иным, как моделью представления, и представление должно знать о его существовании.)
2) Использовать модифицированное связывание.Вы можете указать [Bind (Exclude = "this, that, theother")], чтобы остановить обнуление определенных свойств, а когда свойства являются скалярными свойствами, которые вы просто не хотите иметь на экране, используйте Html.HiddenFor (x=> x.myprop)
Другой подход -
3) Пользовательские связыватели.Вы можете зарегистрировать свое собственное связующее и создать все, что вам нужноЭто не тот подход, который я использовал.но может работать хорошо.
Причина 1) гораздо лучший подход, чем 2) (IMHO) состоит в том, что 2) предоставляет всю вашу модель для обновления через HTML POST.Механизм связывания MVC будет привязывать изменения ко всему, что подходит, поэтому хорошо разработанный POST может делать некоторые неожиданные вещи: обходить отношения, которые вы не намеревались раскрыть, и обновлять свойства.С другой стороны, шаблон Viewmodel должен иметь сущности, которые отображают только те поля, с которыми взаимодействует пользователь, поэтому их можно безопасно связывать.