Entity framework EF实体配置,具有具有抽象类项的列表类型属性,而不考虑鉴别器-EF

Entity framework EF实体配置,具有具有抽象类项的列表类型属性,而不考虑鉴别器-EF,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我的配置有问题。下面是我想做的一个例子 我有这个表结构,经典,标题细节,我不应该改变。 MusicalInstrument表中有一个名为Type的列,其中包含以下可能的值:Piano、Stringed CREATE TABLE MusicalInstrument ( ID UNIQUEIDENTIFIER, [NAME] VARCHAR(200), NumberStrings INT, -- SET WHEN TYPE = Stringed NumberOcta

我的配置有问题。下面是我想做的一个例子

我有这个表结构,经典,标题细节,我不应该改变。
MusicalInstrument
表中有一个名为
Type
的列,其中包含以下可能的值:Piano、Stringed

CREATE TABLE MusicalInstrument
(
    ID UNIQUEIDENTIFIER,
    [NAME]  VARCHAR(200),
    NumberStrings INT, -- SET WHEN TYPE = Stringed
    NumberOctaves INT, -- SET WHEN TYPE = Piano
    [Type] VARCHAR(200) -- Piano, Stringed
)

CREATE TABLE MusicalInstrumentItem
(
    ID UNIQUEIDENTIFIER,
    MusicalInstrumentID UNIQUEIDENTIFIER,
    StringIndex INT, -- SET WHEN MusicalInstrument.TYPE = Stringed
    OctaveIndex INT, -- SET WHEN MusicalInstrument.TYPE = Piano
)
我已经为
音乐设备
创建了一个类层次结构:

public abstract class MusicalInstrumentBase
{
        public Guid ID { get; set; }

        public string Name { get; set; }

        protected abstract IReadOnlyCollection<MusicalInstrumentItemBase> ItemsBase { get; }

        public IReadOnlyCollection<MusicalInstrumentItemBase> Items { get { return this.ItemsBase; } }
}

public  class StringedInstrument: MusicalInstrumentBase
{
        private List<StringedInstrumentItem> _items = new List<StringedInstrumentItem>();

        public int NumberStrings { get; set; }

        protected override IReadOnlyCollection<MusicalInstrumentItemBase> ItemsBase => this.Items;

        public new IReadOnlyCollection<StringedInstrumentItem> Items => _items.AsReadOnly();

        public void PlayArpeggio(string staff) 
        {
            //implement
        }
}

public class PianoInstrument : MusicalInstrumentBase
{
        private List<PianoInstrumentItem> _items = new List<PianoInstrumentItem>();

        public int NumberOctaves { get; set; }

        protected override IReadOnlyCollection<MusicalInstrumentItemBase> ItemsBase => this.Items;

        public new IReadOnlyCollection<PianoInstrumentItem> Items => _items.AsReadOnly();

        public void PlayScale(string note)
        {
            //implement
        }
}
我已经能够根据所示的类的层次结构,使用
HasDiscriminator
,进行必要的配置以存储在
MusicalInstrument
表中,但是,我的问题在于
MusicalInstrumentItem
,我不知道如何将其存储在
MusicalInstrumentItem
表中,关于数据和类层次结构的模型:
MusicalInstrumentItemBase
StringedInstrumentItem
PianoinInstrumentItem

显然,
MusicalInstrumentItem
表没有要区分的列,区分列位于
MusicalInstrument

请有人能帮我怎么做吗


我正在将EntityFrameworkCore 5.0.5与net5.0一起使用

您使用的是哪个版本?完整的、经典的.NET framework上的“经典”EF(v4、v5、v6),还是更新的、跨平台的.NET Core上的EF Core?您对这两个都有标记,这使得我们无法知道您真正使用的是什么以及您的案例中有哪些选项……对不起,我正在使用EntityFrameworkCore 5.0.5和net5.0
public abstract class MusicalInstrumentItemBase
{
        public Guid ID { get; set; }

        public Guid MusicalInstrumentID { get; set; }

        public abstract void FineTune();
}

public class StringedInstrumentItem : MusicalInstrumentItemBase
{
        public int StringIndex { get; set; }

        public override void FineTune()
        {
            // implement
        }
}

public class PianoInstrumentItem : MusicalInstrumentItemBase
{
        public int OctaveIndex { get; set; }

        public override void FineTune()
        {
            // implement
        }
}