Сущности
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"
DbContext
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: указанная схема недопустима.Ошибки: каждое имя свойства в типе должно быть уникальным.Имя свойства 'Home_Phone' уже определено.
Я не могу найти никаких примеров наследования TPH, когда несколько подклассов отображают разные свойства в одни и те же столбцы.Возможно ли это в EF?