Dans une application héritée, la plupart des propriétés de chaîne ne peuvent pas être nulles et doivent avoir une valeur par défaut de string.empty.
Je sais qu'il est possible de le faire avec des migrations, mais je cherche un moyen de le faire en utilisant l'interface de configuration fluide:
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.
}
}
Existe-t-il un moyen de le faire ou je suis condamné à initialiser toutes les chaînes dans les constructeurs d'entités?
Maintenant, la réponse est Oui :
AddColumn("[table name]",
"[column name]",
c => c.Boolean(nullable: false, defaultValue: false));
Malheureusement, la réponse actuelle est "non".
Mais vous pouvez voter pour Meilleur support des valeurs par défaut
EDIT 30 mars 2015: Il arrive dans EF7 ... Supporte les valeurs par défaut de la base de données dans Code First
EDIT 30 janv. 2017: La prise en charge générale des valeurs de base de données par défaut fait partie d'EF Core (le nouveau nom d'EF7) ... Valeurs par défaut
EDIT 17 janv. 2018 : Je ne sais pas pourquoi les gens disent que EF7 est toujours un "rêve de pipe". EF7 (renommé EF Core) a été publié le 27 juin 2016 et prend en charge la définition de valeurs par défaut dans Code First à l'aide de FluentAPI comme ceci:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Rating)
.HasDefaultValue(3);
}
EF Core 2.0 est sorti le 14 août 2017
Vous pouvez définir la valeur par défaut dans le constructeur
class Foo : Model
{
public bool DefaultBool { get; set; }
public Foo()
{
DefaultBool = true;
}
}
Lorsque vous créez un nouveau Foo
, il définira la vraie valeur de la propriété DefaultBool
. Ce n'est pas une contrainte par défaut mais cela fonctionne.