Entity Framework 6 & TPH inheritance: Map properties with the same name to same column by default

有些话、适合烂在心里 提交于 2019-12-21 04:23:16

问题


As of EF6 it is possible to do something like this when configuring Entity mappings using Table Per Hierarchy inheritance:

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 is not part of the Device base class- it is a property of the derived classes implemented to fulfill an interface contract.

Is it possible to make this the default behavior as opposed to having to add a new mapping for each derived class?


回答1:


Used Custom Code First Conventions, which are available from EF6 onwards, to sort this out:

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

This maps properties with the same name in different derived types to the same table column without explicit calls like those mentioned in the question.



来源:https://stackoverflow.com/questions/19577453/entity-framework-6-tph-inheritance-map-properties-with-the-same-name-to-same

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!