web-dev-qa-db-fra.com

Comment définir une contrainte de valeur par défaut avec Entity Framework 6 Code First?

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?

31
ECC-Dan

Maintenant, la réponse est Oui :

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

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

43
Colin

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.

8
Ariel Moraes