Entity Framework 6 и наследование TPH: свойства карты с тем же именем для одного столбца по умолчанию

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

Вопрос

Начиная с EF6, можно сделать что-то подобное при настройке сопоставлений сущностей, используя наследование таблицы на иерархию:

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 не является частью базового класса Device - это свойство производных классов, реализованных для выполнения контракта с интерфейсом.

Можно ли сделать это по умолчанию, а не добавлять новое сопоставление для каждого производного класса?

Принятый ответ

Используемые пользовательские коды Первые соглашения , которые доступны для EF6 и далее, чтобы разобраться в этом:

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

Это сопоставляет свойства с одним и тем же именем в разных производных типах в одном столбце таблицы без явных вызовов, подобных тем, которые упомянуты в вопросе.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему