web-dev-qa-db-fra.com

Entity Framework Core - définition de la précision décimale et de l'échelle pour toutes les propriétés décimales

Je veux définir la précision de toutes les propriétés décimales sur (18,6). Dans EF6, c'était assez facile:

modelBuilder.Properties<decimal>().Configure(x => x.HasPrecision(18, 6));

mais je n'arrive pas à trouver quelque chose de similaire dans EF Core. La suppression de la convention de suppression en cascade n'était pas aussi simple que dans EF6, j'ai donc trouvé la solution de contournement suivante:

EF6:

modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

EF Core:

foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
    relationship.DeleteBehavior = DeleteBehavior.Restrict;

et après avoir lu this , j'ai essayé une approche similaire:

foreach (var entityType in modelBuilder.Model.GetEntityTypes()
    .SelectMany(x => x.GetProperties())
    .Where(x => x.ClrType == typeof(decimal)))
        {
            // what to do here?
        }

Je voudrais si je suis sur la bonne voie et comment continuer, sinon, si je commence à mettre des annotations de données sur toutes les propriétés decimal.

29
GregoryHouseMD

Tu t'es rapproché. Voici le code.

foreach (var property in modelBuilder.Model.GetEntityTypes()
    .SelectMany(t => t.GetProperties())
    .Where(p => p.ClrType == typeof(decimal)))
{
    property.Relational().ColumnType = "decimal(18, 6)";
}

Remarque: si vous avez des types nullables comme decimal?, utilisation:

Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?))
55
bricelam