Подтвердить что ты не робот

Как установить ограничение по умолчанию в Entity Framework 6 Code First?

В устаревшем приложении большинство свойств строки не могут быть нулевыми и должны иметь значение по умолчанию string.empty.

Я знаю, что это можно сделать с помощью миграции, но я ищу способ сделать это, используя свободный интерфейс конфигурации:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<string>().Configure(c =>
        {
            c.HasMaxLength(255);

            if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false))
            {
                c.IsRequired();
                // I want to set a default value (string.empty) here.
            }
    }

Есть ли способ сделать это, или я обречен инициализировать все строки в конструкторах сущностей?

4b9b3361

Ответ 1

Теперь ответ Да:

AddColumn("[table name]", 
          "[column name]", 
          c => c.Boolean(nullable: false, defaultValue: false));

Ответ 2

К сожалению, ответ прямо сейчас - "Нет".

Но вы можете проголосовать за Лучшая поддержка значений по умолчанию

РЕДАКТИРОВАТЬ 30 марта 2015 года: Он входит в EF7... Поддерживать значения базы данных по умолчанию в первом коде

EDIT 30 января 2017: Общая поддержка значений базы данных по умолчанию является частью EF Core (новое имя для EF7)... Значения по умолчанию

Ответ 3

Вы можете установить значение по умолчанию внутри конструктора

class Foo : Model
{
    public bool DefaultBool { get; set; }

    public Foo()
    {
        DefaultBool = true;
    }
}

При создании нового Foo он установит истинное значение для свойства DefaultBool. Это не ограничение по умолчанию, но оно работает.

Ответ 4

Я нашел этот пример здесь

public class Person {
    private const int DEFAULT_AGE = 18;
    private int _age = DEFAULT_AGE;
    [DefaultValue(DEFAULT_AGE)]
    public int Age {
        get { return _age; }
        set { _age = value; }
    }
}

Ответ 5

Я обнаружил, что достаточно использовать Auto-Property Initializer для свойства entity, чтобы выполнить задание.

Например:

public class Thing {
    public bool IsBigThing{ get; set; } = false;
}