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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With