Значение по умолчанию bool равно false, когда в базе данных отсутствует значение с Entity Framework 4.1 Code First - PullRequest
7 голосов
/ 06 апреля 2011

Как установить значение по умолчанию, если значение (бит) в базе данных установлено в NULL.Прямо сейчас я получаю сообщение об ошибке, сообщающее, что при загрузке bool из базы данных не может быть NULL.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 06 апреля 2011

Ваша модель должна совпадать с базой данных - если база данных может иметь значение NULL, вы должны использовать в своей модели значение NULL, допускающее использование значения NULL, однако вы можете перезаписать установщик для этого свойства в вашей модели, чтобы превратить NULL в ложное значение:

public class Foo
{
    private bool _bar;
    public bool? Bar
    {
        get { return _bar; }
        set
        {
            if (!value.HasValue)
            {
                _bar = false;
            }
            else
                _bar = value.Value;
        }
    }
}

В идеале вам следует избегать этой ситуации и устанавливать значение по умолчанию в столбце базы данных - тогда вам не нужно это обходное решение.

5 голосов
/ 14 ноября 2013

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

AddColumn("Jobs", "IsAdvertisingRequired", c => c.Boolean(nullable: false, defaultValueSql: "0"));

Это переведет на следующий SQL:

ALTER TABLE [Jobs] ADD  DEFAULT ((0)) FOR [IsAdvertisingRequired]
GO
1 голос
/ 09 января 2014

Вы можете изменить мой ответ с Возможно ли значение поля DateTime по умолчанию на GETDATE () с миграциями Entity Framework? , чтобы установить для defaultValue / defaultValueSql значение false. Он использует класс-оболочку, который реализует MigrationCodeGenerator, а затем изменяет MigrationOperations (CreateTableOperation / AddColumnOperation), чтобы установить свойства DefaultValueSql для DateTime, если они не равны нулю.

...