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());
...
}
實體框架是告訴我,我不能兩個屬性映射到同一列:
System.Data.MetadataException:指定的架構是無效的。錯誤: 類型中的每個屬性名稱都必須是唯一的。物業名稱 'Home_Phone'已被定義。
我找不到任何TPH繼承的例子,其中多個子類將不同的屬性映射到相同的列。這在EF中可能嗎?
你一定要明白,你有不一致的對象模型開始,不是嗎?我不希望(甚至不讚賞)ORM支持這一點。 –
我的問題遠遠超出了這裏顯示的不一致性,但這並不真正相關。我無權改變根本原因,這就是爲什麼我問是否有可能實現這一點。 –