EF核心中的非标准复合关系

时间:2020-10-23 21:07:37

标签: entity-framework-core ef-core-3.1

我有一个第三方数据库,我试图与EF Core集成,它使用奇怪的复合列而不是外键。关系由“ Parent_Table_Name”和“ Parent_Id”定义。它们不是键,而只是一个包含表名的nchar(20)和一个分别具有该表ID的int。如果它们没有外键,有什么办法可以在表之间建立导航属性?

提供程序是Microsoft SQL Server。这是描述情况的CREATE语句。

CREATE TABLE [ParentA] (Table_Name nchar(20), Id int)
CREATE TABLE [ParentB] (Table_Name nchar(20), Id int)
CREATE TABLE [ChildC] (Table_Name nchar(20), Id int, Parent_Table_Name nchar(20), Parent_Table_Id int)

这是上面表格给出的一些示例数据的图像。

https://stackblitz.com/edit/openlayers-load-local?file=app/components/map/map.component.ts

1 个答案:

答案 0 :(得分:1)

这些被称为多态关联(功能请求#757)。目前尚无一流的支持,但您可以解决它:

malloc
class ParentA
{
    public string Table_Name { get; set; }
    public int Id { get; set; }

    public ICollection<ChildC> ChildCs { get; set; }
}

class ParentB
{
    public string Table_Name { get; set; }
    public int Id { get; set; }

    public ICollection<ChildC> ChildCs { get; set; }
}

class ChildC
{
    public string Table_Name { get; set; }
    public int Id { get; set; }
    
    public int? ParentA_Id { get; set; }
    public ParentA ParentA { get; set; }
    
    public int? ParentB_Id { get; set; }
    public ParentB ParentB { get; set; }
}