在 EF Core 中正确管理鉴别器

问题描述

我有一个实体来描述文档类型:

public class DocumentType
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsLogical { get; set; }
}

您可以看到布尔值 IsLogical。如果它设置为 true,则表示它是一个指向 DocumentType 列表的文档,其中 IsLogical 设置为 false(物理文档)。目标是声明一个类似“身份文件”的文件,并将其指向“身份证”和“护照”和“驾驶执照”。

我没有找到做这件事的好方法。我找到了三种不同的方式,但我不喜欢:

我可以仅使用外键声明另一个实体,例如“LogicalToPhysical”,但我不知道 EF Core 是否可以管理这样的内容:LogicalDocumentTypeId 是来自 DocumentType (FK) 的 Id,其中 IsLogical 设置为 true,PhysicalDocumentTypeId 是来自 DocumentType(另一个 FK)的 ID,其中 IsLogical 设置为 false(一对多关系)。

  • 使用继承

根据this,我可以使用继承,但我不知道如何设置另一个实体来管理我的一对多关系。另一个问题是管理两种对象。

如果我正确理解了这个 article,我可以使用 Value 对象来映射我的列表,但我不确定如何做到这一点。

也许我的想法很糟糕,但如果我能避免管理不同的对象(和来自不同来源的查询),那就更好了。

我在带有 sql Server 2019 的网络核心 API 项目中使用 Entity Framework Core 5。

编辑:在我的推理中,我想象这样的事情:

DocumentType 示例

{1,'Toto','blabla',false }
{2,'Titi',false }
{3,'Tutu',true }
{4,'Tata',false }

Id 3 --> IsLogical : true

一个表的例子(例如LogicalDocument)

LogicalDocument {DocumentType.Id FK,DocumentType.Id FK)
{ 3,1 } // Tutu is pointing to Toto
{ 3,2 } // Tutu is pointing to Titi

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)