Ответ 1
Теперь ответ Да:
AddColumn("[table name]",
"[column name]",
c => c.Boolean(nullable: false, defaultValue: false));
В устаревшем приложении большинство свойств строки не могут быть нулевыми и должны иметь значение по умолчанию 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.
}
}
Есть ли способ сделать это, или я обречен инициализировать все строки в конструкторах сущностей?
Теперь ответ Да:
AddColumn("[table name]",
"[column name]",
c => c.Boolean(nullable: false, defaultValue: false));
К сожалению, ответ прямо сейчас - "Нет".
Но вы можете проголосовать за Лучшая поддержка значений по умолчанию
РЕДАКТИРОВАТЬ 30 марта 2015 года: Он входит в EF7... Поддерживать значения базы данных по умолчанию в первом коде
EDIT 30 января 2017: Общая поддержка значений базы данных по умолчанию является частью EF Core (новое имя для EF7)... Значения по умолчанию
Вы можете установить значение по умолчанию внутри конструктора
class Foo : Model
{
public bool DefaultBool { get; set; }
public Foo()
{
DefaultBool = true;
}
}
При создании нового Foo
он установит истинное значение для свойства DefaultBool
. Это не ограничение по умолчанию, но оно работает.
Я нашел этот пример здесь
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; }
}
}
Я обнаружил, что достаточно использовать Auto-Property Initializer для свойства entity, чтобы выполнить задание.
Например:
public class Thing {
public bool IsBigThing{ get; set; } = false;
}