Entity framework core EF核的非标准复合关系

Entity framework core EF核的非标准复合关系,entity-framework-core,ef-core-3.1,Entity Framework Core,Ef Core 3.1,我有一个第三方数据库,我正试图与EF Core集成,它使用奇怪的组合列而不是外键。关系由“父表名”和“父Id”定义。它们不是键,只是一个nchar(20),分别包含表名和一个ID为该表的int。如果表没有外键,有没有办法在表之间建立导航属性 提供程序是Microsoft SQL Server。下面是描述情况的CREATE语句 CREATE TABLE [ParentA] (Table_Name nchar(20), Id int) CREATE TABLE [ParentB] (Table_Na

我有一个第三方数据库,我正试图与EF Core集成,它使用奇怪的组合列而不是外键。关系由“父表名”和“父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)
下面是上面表格中给出的一些示例数据的图像


这些被称为多态关联(功能请求)。目前还没有一流的支持,但您可以解决这一问题:

父类
{
公共字符串表_Name{get;set;}
公共int Id{get;set;}
公共ICollection ChildCs{get;set;}
}
B类家长
{
公共字符串表_Name{get;set;}
公共int Id{get;set;}
公共ICollection ChildCs{get;set;}
}
C类
{
公共字符串表_Name{get;set;}
公共int Id{get;set;}
public int?ParentA_Id{get;set;}
公共ParentA ParentA{get;set;}
public int?ParentB_Id{get;set;}
公共ParentB ParentB{get;set;}
}
var childrenWithParents=dbContext.ChildCs
//TODO:您还可以在数据库中创建一个视图
//或者在modelBuilder上使用ToSqlQuery
.FromSql(@)
选择表格名称,
身份证件
案例
当Parent\u Table\u Name='ParentA'
然后是父表Id
以ParentA_Id结尾,
案例
当Parent_Table_Name='ParentB'
然后是父表Id
以ParentB_Id结尾
来自ChildC)
.包括(c=>c.ParentA)
.包括(c=>c.B)
.ToList();

请将您的问题包括您的表结构(
CREATE table
语句)和您必须显示“伪外键”的示例数据。在不同的表中添加几行作为示例数据。@Progman我已经这样做了。