如何使用自定义列名和流畅的 API 创建另一个表的可选外键

本文关键字:另一个 创建 API 自定义 何使用 | 更新日期: 2023-09-27 18:35:53

我正在使用实体框架 5,并且正在编写希望在现有数据库架构之上使用的代码优先模型。因此,我无法控制架构设计。

我有两张桌子,mattersusers.users表包含用户帐户 - 系统的实际用户。matters表包含类似于已安排约会或类似性质的数据。

matters表有一个外键要users,在名为 manager 的列中。此列只是说"嘿,此users行指定此mattermanager"。这是一个可选的键 - 一个事务不必有经理。

users 中的记录模型不需要映射回这些事项的属性。

我目前对映射的尝试如下所示:

modelBuilder.Entity<Matter>().HasOptional(m => m.ProjectManager).WithRequired().Map(m => m.MapKey("project_manager"));

有了这个,我试图说Matter在模型的 ProjectManager 属性上有一个可选的 FK,并且用户需要存在,并且matters表中的列名称为 project_manager

这不起作用,并且生成的SQL不正确,但是我不知道如何获得我正在寻找的内容。如果我要编写 SQL,它看起来像这样

SELECT matters.*, users.*
FROM matters
LEFT JOIN users ON matters.project_manager = users.id

如何使用自定义列名和流畅的 API 创建另一个表的可选外键

我要做的是得到那个sql,这是下面的事情。

modelBuilder.Entity<Matter>()
.HasOptional(m => m.ProjectManager)
.WithMany(u => u.Matters)
.HasForeinKey(k=>k.project_manager);

此代码应生成您要查找的 sql 语句。有一个很好的工具可以生成代码优先表和流畅的 api 配置,它是 EntityFramework 反向 POCO 生成器,这对我非常有帮助。