Настроенное ограничение по умолчанию таблицы SQL Server будет только применяться, если у вас есть оператор SQL INSERT
, который пропускает рассматриваемый столбец.
Таким образом, если вы вставите
INSERT INTO dbo.Person(Id, Name) VALUES (42, "John Doe")
->, тогда для вашего CreatedDateTime
будет автоматически установлено значение GETUTCDATE()
.
К сожалению , если вы отобразили этот столбец в своем классе модели EF, то это не , что происходит.Если вы создаете экземпляр Person
в своем коде C #, а столбец CreatedDateTime
фактически является частью класса модели, тогда EF будет использовать что-то подобное для вставки нового человека:
INSERT INTO dbo.Person(Id, Name, CreatedDateTime) VALUES (42, "John Doe", NULL)
и поскольку теперь NULL
фактически предоставляется для столбца CreatedDateTime
, это значение, которое будет сохранено - или, может быть, это пустая строка - несмотря ни на что, указан столбец в операторе INSERT
и, следовательно, сконфигурированное ограничение по умолчанию не применяется .
Поэтому, если вы хотите, чтобы SQL Server включал значения по умолчанию, вам необходимо убедиться, что не для предоставления столбцов, о которых идет речь, в операторе INSERT
.Это можно сделать следующим образом:
с отдельным классом модели только для вставок, который не включает эти столбцы, к которым относится вопрос - например, имеет сущность NewPerson
,он также отображается в таблицу Person
, но состоит, например, только из Name
и ID
.Так как эти свойства отсутствуют, EF не может и не будет генерировать оператор INSERT
с ними - поэтому ограничения SQL Server по умолчанию сработают в
сопоставлении метода INSERT
в хранимую процедуру SQL Server и обработайте вставку внутри этой процедуры, явно указав , а не , указав те столбцы, для которых вы хотите использовать значения по умолчанию