Предполагая, что у меня есть следующая таблица в моей БД:значения по умолчанию DB игнорируется при создании Entity Framework модель
CREATE TABLE [dbo].[Test]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Active] BIT DEFAULT ((1)) NOT NULL,
)
При создании модели EF из этой БД, отображения для битового столбцаActive
, который отображается в Boolean
колонки, не имеет значения по умолчанию (см свойства «значение по умолчанию):
Почему Entity Framework себя таким образом Почему не значения по умолчанию, определенные в базе данных автоматически применяться в? модель wh ru Создается модель? БД утверждает, что значение по умолчанию должно быть 1
, которое, как я предполагал, будет значением по умолчанию true
в модели. Действительно ли мне нужно снова установить значение по умолчанию для всех моих столбцов в модели?
Я проверил (а) эту ситуацию для int и бит столбцы.
Я сделал еще некоторое исследование, и попытался установить свойство «Значение по умолчанию» вручную для True
и true
, и обе работы.
автоматически сгенерированный конструктор для изменения Test-сущностей из
public Test()
{
}
в
public Test()
{
this.Active = true;
}
значений Так по умолчанию был бы возможен в EF, но они не установлены при создании модели на основе базы данных - сначала, по крайней мере, на моей машине.
Итак, Вопрос по-прежнему остается: Неужели мне нужно снова установить значение по умолчанию для всех моих столбцов в модели, даже если они уже установлены в БД?
Должен признать, что я смешался с двумя понятиями «значение по умолчанию», когда думал об этом. DB default = Если для данного столбца задано нулевое значение, используйте значение по умолчанию. EF default = Если создается новый экземпляр определенного объекта, для каждого свойства задается значение по умолчанию (например, в конструкторе). И эти два поведения сочтено не то же самое. –
Но я ожидал бы, что EF возьмет DB-Defaults к вашей созданной модели как «по умолчанию».Так что разработчик просто должен измениться, что нужно изменить, но не смотреть на тысячи столбцов со значениями по умолчанию ... В противном случае почему свойство типа «не null» читается из db? он может быть пустым в EF, если есть триггер для обработки nulls ot что-то ... ??? – swe
@swe -> Да, это также то, как я ожидал, что это сработает: создание экземпляра какой-либо сущности (например, 'Test t = new Test()') будет заполняться значениями по умолчанию. Итак, 'ctx.Tests.Add (t); ctx.SaveChanges(); 'приведет к новой записи в базе данных, содержащей _Test_-entry с' Active = 1', потому что 'Active' 'не был установлен вручную. (как вы сказали,« только изменить то, что имеет для изменения "), и поэтому следует использовать значение по умолчанию. Но похоже, что это не так, как работает EF ... –