我花了一点时间看这个并且无法在网上找到答案(也许我正在寻找错误的东西..)
以下是问题的简化版本。
我有两张桌子:
表1:区域
AreaID | Group 1 | Group2 | Group3 ---------------------------------------------- 1 | 2 | 22 | 10 2 | 5 | 1 | 9 3 | 4 | 3 | 2
表2:组
GroupID | Group | Code | Description ------------------------------------------------- 1 | 1 | 2 | Description 1 2 | 1 | 5 | Description 2 3 | 1 | 4 | Description 3 4 | 2 | 22 | Description 4 5 | 2 | 1 | Description 5 6 | 2 | 3 | Description 6 7 | 3 | 10 | Description 7 8 | 3 | 9 | Description 8 9 | 3 | 2 | Description 9
因此,获取Area 1 Group 3的Group描述的SQL将是:
Select g.Description from Areas a
inner join Groups g on g.Code = a.Group3 and g.Group = 3
where a.AreaID = 1
澄清Areas表有一个外键将其链接到Groups表,但是要从groups表中获取唯一记录,您还需要具有“Group”列。 这可以使用ADO.Net或Stored procs,但我们真的想使用EF并能够在实体之间正确导航。
我还需要指出的是,就本项目而言,我们只需要区域表中的Group3,我们目前对其他任何分组都不感兴趣。
我在哪里: 我已经创建了表示项目中的表的类,我已经在上下文中添加了模型绑定,以根据Area.Group3列映射到Group.Code列来定义Area和Group之间的关系,这是有效的(它本质上是一个目前EF中的多对多关系)但是它还会显示Code列匹配的其他组的所有行(例如上面示例中的代码2带回GroupIDs 1和9)
我希望能够做的是通过说出像
这样的内容来约束它modelBuilder.Entity<Area>()
.hasRequired(a=>a.Group)
.WithMany(g=>g.Areas)
.map(m=>
{m.MapKey("Group3")});
但当然上面没有对Group.Group = 3的约束上面会为每个区域带回多个组,而这些组又会因为绑定告诉它期望一个而中断!
有点絮絮叨叨,如果有人需要澄清以上内容,以便能够帮助我知道并且生病了!
由于