实体
public abstract class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string WorkPhone { get; set; }
public string Discriminator { get; set; }
}
public class Friend : Person
{
public string HomePhone { get; set; }
}
public class Family : Person
{
public string CellPhone { get; set; }
}
public class Colleague : Person
{
// No home phone
}
映射
public class PersonMap : EntityTypeConfiguration<Person>
{
public PersonMap()
{
Property(t => t.FirstName).HasColumnName("First_Name");
Property(t => t.LastName).HasColumnName("Last_Name");
Property(t => t.WorkPhone).HasColumnName("Work_Phone");
Map<Friend>(m => m.Requires("Discriminator").HasValue("Friend");
Map<Family>(m => m.Requires("Discriminator").HasValue("Family");
Map<Colleague>(m => m.Requires("Discriminator").HasValue("Colleague");
}
}
public class FriendMap : EntityTypeConfiguration<Friend>
{
public FriendMap()
{
Property(t => t.HomePhone).HasColumnName("Home_Phone");
}
}
public class FamilyMap : EntityTypeConfiguration<Family>
{
public FamilyMap()
{
Property(t => t.CellPhone).HasColumnName("Home_Phone");
}
}
注意:ColleagueMap
没有"Home_Phone"
的映射
数据库上下文
public override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Configurations.Add(new PersonMap());
modelBuilder.Configurations.Add(new FriendMap());
modelBuilder.Configurations.Add(new FamilyMap());
...
}
Entity Framework 告诉我不能将两个属性映射到同一列:
System.Data.MetadataException: Schema specified is not valid. Errors: Each property name in a type must be unique. Property name 'Home_Phone' was already defined.
我找不到任何 TPH 继承的例子,其中多个子类将不同的属性映射到相同的列。这在 EF 中可能吗?
最佳答案
简短的回答是否定的。每个属性都必须有自己的列。无法将继承层次结构中的多个属性映射到同一列。
关于c# - 是否可以在子类中使用重叠列使用 TPH 继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233754/