Столбец Entity Framework Identity не работает - PullRequest
0 голосов
/ 01 мая 2009

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

Когда я пытаюсь сохранить, используя Create View без установки значения ID, я получаю ошибку «Value is Required». Если я указываю какое-либо значение для ID, оно сохраняется в базе данных, используя значение Identity из базы данных, т.е. а не значение, которое я указал, так что T-SQL, очевидно, генерируется правильно, как только он зашел так далеко.

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

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

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

Ответы [ 4 ]

1 голос
/ 01 мая 2009

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

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

Http: //.../Vacancy/Create

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

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

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

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

0 голосов
/ 29 декабря 2009

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

routes.MapRoute(
   "Create",
   "{controller}/Create",
    new { action = "Create" }
);
0 голосов
/ 02 мая 2009

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

0 голосов
/ 01 мая 2009

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

...