c# - 配置 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
解决方案
推荐阅读
- vue.js - Vue.js 问题:道具不会改变图像 v-bind:src
- blockchain - 函数中返回参数的数据位置必须是“内存”,但没有给出
- qt - 从 Windows 为 linux 目标构建 QT 程序
- html - 如何将响应式汉堡菜单移动到屏幕右侧?
- r - R如何划分这两个矩阵?
- vue.js - vue 包版本不匹配 vue@1.0.28-csp
- minimum-spanning-tree - 给定边加权图的 MST,如何找到从 x 到 y 的最小加权路径?
- .net - 使用 `dotnet build` 或 `dotnet publish` 时如何为引用的项目指定构建配置?
- file - 我无法使用 MARS 读取或写入文件 - mips
- sitecore8.2 - Sitecore SXA 错误路径中的非法字符