1

我正在使用 Entity Framework 5,并且我正在编写我希望在现有数据库模式之上使用的代码优先模型。所以,我无法控制架构设计。

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

该表在名为 的列中matters具有指向 的外键。这一列只是说“嘿,这一行指定了这个。” 这是一个可选的键 - 事情不必有一个经理。usersmanagerusersmanagermatter

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

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

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

有了这个,我想说Matter在模型的属性上有一个可选的 FK,ProjectManager并且用户必须存在,并且表中的列名matters被称为project_manager.

虽然这不起作用,并且生成的 SQL 不正确,但我无法弄清楚如何获得我正在寻找的东西。如果我要编写 SQL,它看起来像这样

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

1 回答 1

1

为了得到那个sql,我会做以下事情。

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

此代码应生成您正在寻找的 sql 语句。有一个很好的工具可以生成代码优先表和流畅的 api 配置,它是EntityFramework Reverse POCO Generator,这对我很有帮助。

于 2013-10-18T06:27:14.023 回答