Как заставить EF понять, что некоторые столбцы не могут принимать значения NULL?

Я определил эту прекрасную таблицу.

create table WeirdDonkey (
  Tails int not null,
  Heads int default 7
)

Когда я запускаю на нем EF, он создает два поля следующим образом.

public int Tails { get; set; }
public Nullable<int> Heads { get; set; }

Теперь я понимаю, почему он считает, что количество голов может быть обнулено, но это не имеет никакого смысла. У осла не может быть нулевых голов. Может иметь 7, если ничего не указано. (Ну, с зоологической точки зрения это не имеет никакого смысла, но давайте представим, что мы находимся на другой планете, которая следует правилам моей магии SQL).

Как сделать так, чтобы EF понял, что по умолчанию стоит 7 и нуль-головых ослов не будет?


person Konrad Viltersten    schedule 24.12.2015    source источник
comment
Присвоение столбцу значения по умолчанию не останавливает его обновление до нулевого значения.   -  person Preston Guillot    schedule 25.12.2015
comment
EF прав, см. демонстрацию. Вы можете легко вставить NULL.   -  person Lukasz Szozda    schedule 25.12.2015


Ответы (1)


ЭФ прав. Heads может иметь нулевое значение. Что произойдет, если после вставки строки вы решите обновить значение Heads до null. База данных не примет? Да, это будет.

Если вам не нужны нули, вы должны явно определить их как таковые:

create table WeirdDonkey (
  Tails int not null,
  Heads int not null default 7
)
person sstan    schedule 24.12.2015
comment
О, так глупо... Я полностью пропустил это. Считаете ли вы, что разумнее использовать не null или добавить ограничение? Первый кажется проще, поэтому я бы предпочел его. Но более простое часто оказывается менее долгосрочным... - person Konrad Viltersten; 25.12.2015
comment
not null в любом случае является типом ограничения. Так что да, просто используйте not null. Нет смысла использовать более подробный синтаксис. - person sstan; 25.12.2015