如何使用自定义列名和流畅的 API 创建另一个表的可选外键
本文关键字:另一个 创建 API 自定义 何使用 | 更新日期: 2023-09-27 18:35:53
我正在使用实体框架 5,并且正在编写希望在现有数据库架构之上使用的代码优先模型。因此,我无法控制架构设计。
我有两张桌子,matters
和users
.users
表包含用户帐户 - 系统的实际用户。matters
表包含类似于已安排约会或类似性质的数据。
matters
表有一个外键要users
,在名为 manager
的列中。此列只是说"嘿,此users
行指定此matter
的manager
"。这是一个可选的键 - 一个事务不必有经理。
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
我要做的是得到那个sql,这是下面的事情。
modelBuilder.Entity<Matter>()
.HasOptional(m => m.ProjectManager)
.WithMany(u => u.Matters)
.HasForeinKey(k=>k.project_manager);
此代码应生成您要查找的 sql 语句。有一个很好的工具可以生成代码优先表和流畅的 api 配置,它是 EntityFramework 反向 POCO 生成器,这对我非常有帮助。