2013-10-24 2 views
7

По EF6 можно сделать что-то вроде этого при настройке отображения сущностей с использованием таблицы за иерархии наследования:Entity Framework 6 и TPH наследование: Карта свойства с тем же именем в той же колонке, по умолчанию

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

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

ответ

9

Используется Custom Code First Conventions, которые доступны с EF6 года, чтобы разобраться в этом:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^