Столбец Entity Framework Identity не работает

Я новичок в Entity Framework и сейчас создаю свое первое приложение MVC. Я реализую Create View для простой Entity, однако у меня возникают проблемы с первичным ключом столбца Identity (SQL Express 2005). Насколько я понимаю, Framework должна обрабатывать столбец Identity и позволять базе данных SQL генерировать значение идентификатора.

Когда я пытаюсь сохранить, используя представление «Создать», не задав значение идентификатора, я получаю сообщение об ошибке «Требуется значение». Если я укажу какое-либо значение для идентификатора, он будет сохранен обратно в базу данных, используя значение идентификатора из базы данных, т.е. а не значение, которое я указал, поэтому очевидно, что T-SQL генерируется правильно, когда он заходит так далеко.

Свойство Identity устанавливается в столбце ID в базе данных, а StoreGeneratedPattern устанавливается в значение «Identity» в модели (см. Ниже): -

Имя свойства = "ID" Type = "int" Nullable = "false" StoreGeneratedPattern = "Identity"

Я что-то упускаю? Как сообщить модели, что значение для этого столбца не требуется?


person Community    schedule 01.05.2009    source источник


Ответы (4)


Тайна раскрыта. Похоже, проблема возникла в результате моего соглашения об именах, в котором всегда использовалось «ID» в качестве имени столбца для столбца ID.

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

http://.../Vacancy/Create

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

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

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

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

person Community    schedule 01.05.2009

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

person Craig Stuntz    schedule 01.05.2009
comment
Ты прав. Это не имеет отношения к базе данных. UpdateModel (entity) не работает при получении FormCollection. Попробуем по-другому ModelState.IsValid = false при передаче объекта. Для поля ID требуется значение, которое требуется для подтверждения. - person ; 01.05.2009

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

person mhenrixon    schedule 01.05.2009

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

routes.MapRoute(
   "Create",
   "{controller}/Create",
    new { action = "Create" }
);
person Emir    schedule 29.12.2009