问题
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