У меня возникли проблемы с попыткой подумать, что лучший способ - воссоздать объект базы данных в контроллере Action.Объекты базы данных Modelbinding в ASPNET MVC
Я хочу использовать ModelBinders, поэтому в своем действии у меня есть доступ к объекту через параметр, вместо необходимости повторять код для получения объекта из базы данных на основе параметра идентификатора. Поэтому я думал о том, что ModelBinder выполняет вызов уровня данных для получения исходного объекта (или создает новый, если он не существует в базе данных), а затем связывает любые свойства с объектом базы данных, чтобы обновить его. Однако я читал, что ModelBinders не должны делать запросы к базе данных (первый комментарий этого article).
Если ModelBinder не должен выполнять запрос базы данных (так что просто используйте DefaultModelBinder), то что относительно объектов базы данных, которые имеют свойства, которые являются другими объектами db? Они никогда не будут назначены.
Сохранение объекта после того, как пользователь отредактировал его (1 или 2 свойства доступны для редактирования) объект ModelBinded будет отсутствовать данными, поэтому сохранение его как это приведет к тому, что данные в базе данных будут перезаписаны с недопустимыми значениями , или NOT-NULL сбой.
Итак, каков наилучший способ получить объект в действии контроллера из базы данных, связанной с данными формы, отправленными назад из представления?
Обратите внимание на использование NHibernate.
Я нахожусь в точно такой же ситуации, как и вы (также используя NH). Я реализовал модельное связующее, чтобы избежать дублирования кода. Каков ваш вывод о доступе к БД из связующего? –
В итоге я встал на сторону доступа к базе данных в связующих. Мое модели просмотра теперь разделены на мои модели домена. Существуют проблемы со связыванием непосредственно с вашими моделями домена (nhibernate очистит связанный объект в конце запроса с помощью, возможно, недопустимых данных, и если вы не создадите новый сеанс, повторно получая объект, который вы используете, вы в конечном итоге используете недействительный связанный объект в течение всего запроса). –
Спасибо, что сообщили мне. –