【发布时间】:2017-04-26 15:46:36
【问题描述】:
我有以下实体:
public abstract class Freezer
{
public int FreezerId { get; set; }
public string Name { get; set; }
public int FreezerTypeId { get; set; }
public int Capacity { get; set; }
}
public class FoodFreezer : Freezer
{
public List<FoodItem> Foods { get; set; }
}
public class ChemicalFreezer : Freezer
{
public List<ChemicalItem> Chemicals { get; set; }
}
正如您所见,派生的Freezer 类不包含任何将存储在数据库中的数据;它们只包含特定类型内容的导航属性。
我有以下配置:
internal class FreezerConfiguration<T> : DbEntityConfiguration<T> where T : Freezer
{
public override void Configure(EntityTypeBuilder<T> builder)
{
builder.ToTable("Freezers");
builder.HasKey(x => x.FreezerId);
builder.Property(x => x.FreezerId).IsRequired();
builder.Property(x => x.Name).IsRequired();
builder.Property(x => x.FreezerTypeId).IsRequired();
builder.Property(x => x.Capacity).IsRequired();
}
}
internal class FoodFreezerConfiguration : FreezerConfiguration<FoodFreezer>
{
public override void Configure(EntityTypeBuilder<FoodFreezer> builder)
{
builder.HasMany(x => x.FoodItems).WithOne(x => x.Freezer);
}
}
当我调用从我的上下文中获取FoodFreezers 的列表时,我收到“无效的列名'鉴别器'”错误。在做了一些研究之后,似乎不喜欢FoodFreezer 和ChemicalFreezer 指向一个表的事实。我需要改变什么?我是否需要一个 FoodFreezers 和 ChemicalFreezers 数据库表,其中只有一个 FreezerId 列是 Freezers 表的 FK?
【问题讨论】:
-
似乎您想要实现一个按层次结构表 (TPH) 结构,但您似乎没有在映射中使用
HasDiscriminator()方法。见docs.microsoft.com/en-us/ef/core/modeling/relational/…
标签: c# entity-framework entity-framework-core