Как вставить значения БД по умолчанию под EF? - PullRequest
7 голосов
/ 13 ноября 2010

при добавлении новой записи, подобной этой

ContentContacts c2 = new ContentContacts();

c2.updated_user = c2.created_user = loggedUserId;
c2.created_date = c2.updated_date = DateTime.UtcNow;

db.ContentContacts.AddObject(c2);

Я получаю

Невозможно вставить значение NULL в столбец 'main_email_support', таблица 'SQL2008R2.dbo.ContentContacts«;столбец не допускает пустых значений.Вставить не удается.Оператор был прерван.

, но значением по умолчанию в базе данных является пустая строка типа:

alt text

Почему я получаю такую ​​ошибку?если EF не говорит что-то вроде:

"ооо, это значение null, поэтому давайте вместо этого добавим значение по умолчанию для столбца"

1 Ответ

6 голосов
/ 14 ноября 2010

Я провел небольшой тест, создал таблицу со столбцом, который имел значение по умолчанию, но не допускал нулевые значения.

Тогда этот оператор SQL:

INSERT INTO [Test].[dbo].[Table_1]
       ([TestText])
 VALUES
       (null)

Дает эту ошибку:

Сообщение 515, уровень 16, состояние 2, строка 1
Невозможно вставить значение NULL в столбец «TestText», таблица «Test.dbo.Table_1»;столбец не допускает пустых значений.INSERT завершается неудачей.

Проблема здесь в том, что вставка задает все столбцы, в том числе со значениями по умолчанию.Вставка пытается обновить столбцы с нулевыми значениями.

У вас есть 2 варианта:

  • Обновить таблицу через представление, которое не содержит столбцы по умолчанию
  • Установите значения по умолчанию в вашем коде C #

Значением по умолчанию является бизнес-логика, поэтому есть случаи, когда оно задается на бизнес-уровне вашего приложения.

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