Столбец удостоверений 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.

Когда я звонил

http:/Vacancy/Create

Механизм маршрутизации принимает это как

Действие = Создать; ID = ""

из MapRoute "{controller}/{action}/{id}"

Изменил имя столбца идентификации на "VacancyID" в модели и вуаля, все работает как надо.

Я хотел бы создать собственный маршрут, это то, что они для в любом случае...

Вы не говорите, откуда исходит ошибка "Требуется значение". Целочисленные значения в вашей клиентской модели будут по умолчанию равны нулю, поэтому всегда будет значение. Не видя стека, мое дикое предположение состоит в том, что ошибка исходит откуда-то еще. Посмотрите на стек, когда увидите ошибку, и выясните, какая часть вашего приложения ее вызывает.

Если вы не хотите изменять схему базы данных, вы можете добавить правило маршрутизации без параметра id

routes.MapRoute(
   "Create",
   "{controller}/Create",
    new { action = "Create" }
);
Другие вопросы по тегам