1

Предполагая, что у меня есть следующая таблица в моей БД:значения по умолчанию DB игнорируется при создании Entity Framework модель

CREATE TABLE [dbo].[Test] 
(
    [Id]  INT   IDENTITY (1, 1) NOT NULL, 
    [Active] BIT   DEFAULT ((1)) NOT NULL, 
) 

При создании модели EF из этой БД, отображения для битового столбцаActive, который отображается в Boolean колонки, не имеет значения по умолчанию (см свойства «значение по умолчанию): Property View - Model Diagram

Почему Entity Framework себя таким образом Почему не значения по умолчанию, определенные в базе данных автоматически применяться в? модель wh ru Создается модель? БД утверждает, что значение по умолчанию должно быть 1, которое, как я предполагал, будет значением по умолчанию true в модели. Действительно ли мне нужно снова установить значение по умолчанию для всех моих столбцов в модели?

Я проверил (а) эту ситуацию для int и бит столбцы.


Я сделал еще некоторое исследование, и попытался установить свойство «Значение по умолчанию» вручную для True и true, и обе работы.

Manually changed default value

автоматически сгенерированный конструктор для изменения Test-сущностей из

public Test() 
{ 
} 

в

public Test() 
{ 
    this.Active = true; 
} 

значений Так по умолчанию был бы возможен в EF, но они не установлены при создании модели на основе базы данных - сначала, по крайней мере, на моей машине.

Итак, Вопрос по-прежнему остается: Неужели мне нужно снова установить значение по умолчанию для всех моих столбцов в модели, даже если они уже установлены в БД?

+2

Должен признать, что я смешался с двумя понятиями «значение по умолчанию», когда думал об этом. DB default = Если для данного столбца задано нулевое значение, используйте значение по умолчанию. EF default = Если создается новый экземпляр определенного объекта, для каждого свойства задается значение по умолчанию (например, в конструкторе). И эти два поведения сочтено не то же самое. –

+1

Но я ожидал бы, что EF возьмет DB-Defaults к вашей созданной модели как «по умолчанию».Так что разработчик просто должен измениться, что нужно изменить, но не смотреть на тысячи столбцов со значениями по умолчанию ... В противном случае почему свойство типа «не null» читается из db? он может быть пустым в EF, если есть триггер для обработки nulls ot что-то ... ??? – swe

+0

@swe -> Да, это также то, как я ожидал, что это сработает: создание экземпляра какой-либо сущности (например, 'Test t = new Test()') будет заполняться значениями по умолчанию. Итак, 'ctx.Tests.Add (t); ctx.SaveChanges(); 'приведет к новой записи в базе данных, содержащей _Test_-entry с' Active = 1', потому что 'Active' 'не был установлен вручную. (как вы сказали,« только изменить то, что имеет для изменения "), и поэтому следует использовать значение по умолчанию. Но похоже, что это не так, как работает EF ... –

ответ

0

Попробуйте это:

StoreGeneratedPattern = Calculated 

Edit:

Извините за один код строки ответа, но я действительно был в спешке в последний день.

Чтобы EF установить значение по умолчанию дб свойства, в самом быстром способе открыть свой EDMX-дизайнер, нажмите на заинтересованном поле и установить

StoreGeneratedPattern = Рассчитан

В его свойствах (вы можете увидеть это свойство на втором скриншоте, где вы устанавливаете значение по умолчанию «true»).

+0

Пожалуйста, добавьте больше объяснений. –

Смежные вопросы