EF Core“無效的列名稱'Discriminator' - 帶繼承的錯誤

c# entity-framework entity-framework-core

我有以下實體:

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);
    }
}

當我打電話從我的上下文中獲取FoodFreezer的列表時,我得到一個“無效的列名'Discriminator'”錯誤。在做了一些研究之後,似乎它不喜歡FoodFreezerChemicalFreezer指向單個表的事實。我需要改變什麼?我是否需要FoodFreezers和ChemicalFreezers數據庫表,只有一個FreezerId列,它是冰箱表的FK?

熱門答案

@ haim770讓我走上了正確的道路。我必須將以下內容添加到我的FreezerConfiguration

builder.HasDiscriminator(x => x.FreezerTypeId)
    .HasValue<FoodFreezer>(FreezerTypeEnum.Food)
    .HasValue<ChemicalFreezer>(FreezerTypeEnum.Chemical);

無需其他表或代碼。如果我嘗試使用ChemicalFreezer的ID獲取FoodFreezer ,則返回null 。真的很酷。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow