在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基类的一部分--它是为实现接口契约而实现的派生类的属性。
是否有可能使这成为默认行为,而不是为每个派生类添加一个新的映射?
发布于 2014-03-18 18:16:29
使用了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
}这将不同派生类型中同名的属性映射到相同的表列,而不像问题中提到的那样显式调用。
https://stackoverflow.com/questions/19577453
复制相似问题