gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:12:48 25 4
gpt4 key购买 nike

实体

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com