Столбец удостоверений Entity Framework не работает
Я довольно новичок в Entity Framework и нахожусь в процессе создания моего первого приложения MVC. Я реализую представление Create для простого объекта, однако у меня возникли проблемы с первичным ключом столбца идентификаторов (SQL Express 2005). Насколько я понимаю, Framework должен обрабатывать столбец Identity и позволять базе данных SQL генерировать значение ID.
Когда я пытаюсь сохранить, используя Create View без установки значения ID, я получаю сообщение об ошибке "Требуется значение". Если я укажу какое-либо значение для ID, оно будет сохранено обратно в базу данных, используя значение Identity из базы данных, т.е. а не значение, которое я указал, так что T-SQL, очевидно, генерируется правильно, как только он зашел так далеко.
Свойство Identity установлено для столбца ID в базе данных, а для StoreGeneratedPattern в модели установлено значение "Identity" (см. Ниже):
Имя свойства ="ID" Type="int" Nullable="false" StoreGeneratedPattern="Identity"
Я что-то пропустил? Как мне сообщить модели, что для этого столбца значение не требуется?
4 ответа
Тайна разгадана. Кажется, эта проблема была результатом моего соглашения об именах, когда я всегда использовал "ID" в качестве имени столбца для столбца ID.
Когда я звонил
Механизм маршрутизации принимает это как
Действие = Создать; ID = ""
из MapRoute "{controller}/{action}/{id}"
Изменил имя столбца идентификации на "VacancyID" в модели и вуаля, все работает как надо.
Я хотел бы создать собственный маршрут, это то, что они для в любом случае...
Вы не говорите, откуда исходит ошибка "Требуется значение". Целочисленные значения в вашей клиентской модели будут по умолчанию равны нулю, поэтому всегда будет значение. Не видя стека, мое дикое предположение состоит в том, что ошибка исходит откуда-то еще. Посмотрите на стек, когда увидите ошибку, и выясните, какая часть вашего приложения ее вызывает.
Если вы не хотите изменять схему базы данных, вы можете добавить правило маршрутизации без параметра id
routes.MapRoute(
"Create",
"{controller}/Create",
new { action = "Create" }
);