首页 > 解决方案 > 配置 EF Core TPT 映射以使用特定的外键列连接基类表和派生类表

问题描述

我正在将一个项目从 NHibernate 迁移到 EF Core 5,并尝试将每个子类的 NHibernate 表的行为复制到每个类型的表的 EF 等效项。我有以下内容:

public class User
{
   public long long Id { get; set; }
   ...
}

public class SpecialUser : User
{
    public long UserId { get; set; } // Foreign key to User table
    ...
}

在 DbContext 我有以下内容:

protected override void OnModelCreating(ModelBuilder mb)
{
    mb.Entity<User>()
        .ToTable("user");

    mb.Entity<SpecialUser>()
        .ToTable("special_user");
}

在数据库中,special_user 表有一个 Id(与对应的用户记录的 id 不同)和一个外键 user_id。但是,当 EF 核心执行查询时,它会尝试加入两个期望 id 相同的表:

select * from user left join special_user on user.id = special_user.id

有没有办法告诉实体框架使用 special_user 表上的 user_id 外键连接表,以便查询看起来像:

select * from user left join special_user on user.id = special_user.user_id

标签: c#database.net-coreentity-framework-coretable-per-type

解决方案


推荐阅读