链接dbContext中的两个表,其中一个键未在数据库中定义

时间:2015-02-05 11:17:36

标签: c# entity-framework

我花了一点时间看这个并且无法在网上找到答案(也许我正在寻找错误的东西..)

以下是问题的简化版本。

我有两张桌子:

表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的约束上面会为每个区域带回多个组,而这些组又会因为绑定告诉它期望一个而中断!

有点絮絮叨叨,如果有人需要澄清以上内容,以便能够帮助我知道并且生病了!

由于

0 个答案:

没有答案