c# - 是否可以在子类中使用重叠列使用 TPH 继承?

标签 c# .net entity-framework entity-framework-4.1

实体

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/

相关文章:

.net - 关于正则表达式中的组匹配的问题

c# - 如何从单独的 ssdl + csdl + msl 文件而不是 edmx 创建 ObjectContext?

时间:2019-03-17 标签:c#AzureFunctions分离html和css

c# - `foreach` 什么时候停止处理字符串?

c# - System.Web.HttpRequestValidationException : A potentially dangerous Request. 从机器人客户端检测到表单值?

c# - MVC2 模型验证 - 至少需要一个

c# - DataGridView如何实现自动滚动?

.net - 在 Visual Studio 2013 上生成序列化程序集

c# - Entity Framework 与 OrderBy 不同

c# - 使用 GraphDiff 更新两个相关表中的数据