#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.