Herencia de Entity Framework 6 y TPH: asigne propiedades con el mismo nombre a la misma columna de forma predeterminada

.net entity-framework-6 table-per-hierarchy

Pregunta

A partir de EF6, es posible hacer algo como esto cuando se configuran asignaciones de entidad usando la herencia de tabla por jerarquía:

public class MyContext : DbContext 
{
    public DbSet<Device> Devices { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ABatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel");
        modelBuilder.Entity<ADifferentBatteryPoweredDevice>().Property(c => c.BatteryLevel).HasColumnName("BatteryLevel");
    }
}

BatteryLevel no es parte de la clase base del Device , es una propiedad de las clases derivadas implementadas para cumplir un contrato de interfaz.

¿Es posible hacer que este sea el comportamiento predeterminado en lugar de tener que agregar una nueva asignación para cada clase derivada?

Respuesta aceptada

Se utilizaron las Convenciones del Código Personalizado Primero , que están disponibles desde EF6 en adelante, para resolver esto:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //your code before
        modelBuilder.Properties().Configure(prop => prop.HasColumnName(prop.ClrPropertyInfo.Name));
        //your code after
    }

Esto asigna propiedades con el mismo nombre en diferentes tipos derivados a la misma columna de la tabla sin llamadas explícitas como las mencionadas en la pregunta.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué