Позвольте мне начать говорить о проблеме: когда я отправляю свой вид, мое действие получает объект из класса Customer, у которого есть внешние ключи, которые являются целыми, но должны иметь значение NULL.MVC + EntityFramework + проверка поля
Класс был сгенерирован EF Designer, а структура моей базы данных состоит в следующем (я желаю поместить изображение, но он говорит мне, что мне нужно 10 репутации):
Customer (Table)
CityId -> City (Table)
CityId
StateId -> State (Table)
StateId
CountryId -> Country (Table)
CountryId
RESUMING, я иметь Клиента, который должен находиться в городе, который должен быть связан с государством, которое должно быть связано со страной.
В другой руке у меня есть вид, который имеет 3 выпадающих списка: 1, чтобы выбрать страну, другую - выбрать одно государство из выбранной страны, а третье - выбрать город из выбранного состояния. Когда я выбираю страну, вид (через JSON), заполняю другое выпадающее меню с состояниями и т. Д., Поэтому очевидно, что я сохраняю только CityId.
Проблема заключается в том, когда я пытаюсь представить, то MVC показывает мне следующую проверку:
The CountryId field is required.
The StateId field is required.
The CityId field is required.
Это происходит потому, что эти поля являются Int32. Итак, первое, что я сделал, это изменить, в EF Designer эти поля на nullable (потому что я хочу поставить персональную проверку через ModelState.AddModelError).
Я также изменил Кратность на 0..1.
В базе данных эти поля должны быть недействительными.
Но теперь я получаю следующее сообщение об ошибке: Ошибка 3 Ошибка 3031: Проблема с отображением фрагментов, начинающихся с строки 1074: Столбец с нулевым значением Cidades.EstId в таблице Cidades сопоставляется с свойством nullable entity.
Каков наилучший способ исправить это?
Заранее спасибо
Вы используете модели сущности в своем представлении? Возможно, вы захотите рассмотреть возможность компоновки моделей представления и затем сопоставить их с моделями сущностей перед обновлением. Звучит как хлопот, но AutoMapper действительно помогает там. https://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/ –
Привет @SteveGreene! Я использую модели сущностей в моем представлении. В другом крупном проекте я использовал компоновку моделей просмотра, но это тяжелая работа, избыточность и сложность в управлении (когда проект действительно большой). Этот проект будет большим, и я не хочу иметь ту же проблему обслуживания «временных» классов. Я полагаю, что установка поля в ** int? ** (вместо этого только ** int **) является наилучшим способом, но я никогда не делал этого, прежде чем использовать EntityFramework. – Dan
Я бы сказал, что когда проект действительно большой, вам особенно нужно следовать шаблону ViewModel. Это отделяет ваши проблемы и облегчает обслуживание в будущем. Для вашей текущей проблемы вы в конечном итоге сделаете поле с нулевым значением, когда (похоже, это требует бизнес-правило). Automapper - ваш друг здесь. –