Entity Framework Определение ограничений для ненулевых числовых полей - PullRequest
0 голосов
/ 24 мая 2011

Это продолжение этого вопроса
Entity Framework 4, не учитывающий ограничения базы данных для числовых полей

Возможно ли достичь следующего

Таблица: Foo
PkId - int, primary, autoincrement
Bar - int, allow null = false, по умолчанию нет

Теперь при создании модели EF из базы данных поле 'Bar' имеет видправильно определено как Nullable = false, Type = Int32.

Теперь, когда я делаю следующее

var foo = new Foo ();
context.AddToFoos (foo);
context.SaveChanges ();

Строка вставлена ​​в базу данных, и значение 'Bar' равно 0?

Чего бы я ожидал, так это исключения уровня приложения, поскольку приложение технически не настроено Баром.Его значение по умолчанию .Net не переводится автоматически в допустимое значение для конкретной базы данных.

Поведение должно быть аналогично строковым столбцам в БД.Строки обрабатываются правильно, потому что они имеют нулевое состояние, и это хорошо переводится.

Как это обычно достигается для числовых столбцов?

1 Ответ

0 голосов
/ 24 мая 2011

Не забудьте установить значение свойства Bar в вашем объекте модели, когда вы не хотите хранить 0. Когда вы создаете новый объект и вызываете SaveChanges, команда INSERT отправляется в базу данныхкоторый содержит значение all свойств вашей модели, которые сопоставлены с таблицей БД.Свойство int в классе всегда имеет значение, и вы установили это значение равным 0, а именно, вызывая конструктор объекта.

EF не отправляет только одну половину объекта в базу данных, этосущественная точка Object-Relational-Mapper.Конечно, отправив необработанную команду SQL INSERT, вы можете установить только одну половину значений столбца строки таблицы, и вы получите исключение, если не установите значение для столбца Bar.Но когда вы используете ORM, вы не отправляете команды INSERT, а сохраняете новые объекты.

В чем именно проблема?Если значение Bar недопустимо, столбец должен иметь значение NULL и свойство int?.Если оно должно иметь значение, но не значение 0, то это вопрос установки Bar в 1 или чего-то еще в конструкторе объекта или применения правильной проверки перед сохранением объекта.

Тип исключения, который вы бы сделалинравится иметь невозможно и, по моему мнению, не имеет смысла, потому что невозможно не установить значение в команде INSERT, которую EF будет отправлять при сохранении объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...