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

#entity-framework-4

#entity-framework-4

Вопрос:

Допустим, у меня есть таблица в базе данных, определенная следующим образом

Таблица: Foo
PkId — int, первичный, автоинкрементный
Bar — int, разрешить null = false, по умолчанию нет

Теперь при генерации модели EF из базы данных поле ‘Bar’ правильно определено как Nullable = false, Type =Int32.

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

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

Строка вставлена в базу данных, а ‘Bar’ имеет значение 0? Я ожидал бы исключения, потому что Bar не был установлен. Я понимаю, что 0 не равно нулю, но это также не то значение, которое я установил.

Это специально или я что-то неправильно понял?

Ответ №1:

Это не обнуляемое значение и, следовательно, значение int. Значение int по умолчанию равно 0. Итак, БД довольна, и фреймворк тоже в порядке.

Комментарии:

1. Да, я понимаю это, но технически значение не было установлено, для чего и существует ограничение в первую очередь. Очень странно.

2. Это ограничение базы данных. Для .NET значение Int32 по умолчанию равно 0. Вот почему я сказал, что база данных не жалуется.

3. Спасибо, поэтому мне, возможно, придется перефразировать / перепечатать свой вопрос. Вы знаете, возможно ли то, что я ищу, вообще в EF?

4. Я думаю, вы можете использовать шаблоны T4, чтобы сделать что-то подобное, не обнуляемое в DB, но обнуляемое в EF.