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