tph hascolumntype framework entitytypeconfiguration computed column entity-framework-core pluralize tablename

entity framework core - hascolumntype - Entidad Framework Core RC2 tabla nombre pluralización



entitytypeconfiguration entity framework core (3)

En Entity Framework NET core v2 puede elegir pluralizar o singularizar DbSets y Collections con un gancho.

public class MyDesignTimeServices : IDesignTimeServices { public void ConfigureDesignTimeServices(IServiceCollection services) { services.AddSingleton<IPluralizer, MyPluralizer>(); } } public class MyPluralizer : IPluralizer { public string Pluralize(string name) { return Inflector.Inflector.Pluralize(name) ?? name; } public string Singularize(string name) { return Inflector.Inflector.Singularize(name) ?? name; } }

Consulte esta respuesta para obtener más información: https://stackoverflow.com/a/47410837/869033

¿Hay alguna manera de hacer lo que hizo este código en EF Core RC 2?

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); }


La versión de EF Core no parece ser compatible con entity.DisplayName . Esta es una alternativa de trabajo:

foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { // Skip shadow types if (entityType.ClrType == null) continue; entityType.Relational().TableName = entityType.ClrType.Name; }


No hay ninguna convención para esto a partir de la compilación EF RC2. Esto es del equipo de EF Core:

En la versión preliminar anterior de EF Core, el nombre de la tabla para una entidad era el mismo que el nombre de la clase de la entidad. En RC2 ahora usamos el nombre de la propiedad DbSet. Si no se define ninguna propiedad DbSet para el tipo de entidad dado, entonces se usa el nombre de clase de la entidad.


Ahora, si desea volver a las convenciones de nomenclatura RC1 para las tablas, tiene 3 formas de hacerlo con:


1. Elegir nombres singulares para las propiedades de DbSet:

Una forma es singularizar los nombres de las propiedades de DbSet (que no me gustan). Digamos, por ejemplo, que tiene una entidad de libro y que desea asignar a una tabla de libro :

public DbSet<Book> Book { get; set; }


2. Usando ToTable () Fluent API:

Por supuesto, siempre puede usar una API fluida para anular cualquier convención vigente y dictar el nombre de la tabla a lo que desee:

modelBuilder.Entity<Book>().ToTable("Book");


3. Escribir una convención personalizada:

El hecho de que EF Core RC2 no tenga una convención para esto, no significa que no podamos escribir la nuestra. Para hacerlo, primero necesitamos crear un método de extensión en el objeto ModelBuilder :

using Microsoft.EntityFrameworkCore.Metadata.Internal; public static class ModelBuilderExtensions { public static void RemovePluralizingTableNameConvention(this ModelBuilder modelBuilder) { foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { entity.Relational().TableName = entity.DisplayName(); } } }

Y luego simplemente lo llamamos desde el método OnModelCreating en nuestro objeto DbContext :

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.RemovePluralizingTableNameConvention(); }


Al cierre:

No me gustan los nombres de tablas plurales y me gusta la última opción mejor que las otras y seguí con eso. Dicho esto, es mi opinión personal y otros desarrolladores pueden encontrar cualquiera de estas 3 formas más favorables que las otras y optar por ir con eso :)