【发布时间】:2017-07-22 12:40:21
【问题描述】:
我有两个具有 1 对 1..* 关系的表(这意味着“状态”表中总会有特定 ID 的记录。
|Area| | Status |
------ -------------------
|[Key] ID | ----> |[Key] ID |
| Name| |[Key] Start Date |
| End Date |
我的数据层中建立了如下关系。
面积
HasMany(s => s.Statuses)
.WithRequired()
.HasForeignKey(s => s.Id);
状态
HasRequired(a => a.Area)
.WithMany(s => s.Statuses)
.HasForeignKey(s => s.Id);
我有一个通用的“AllIncluding”方法,用于收集相关数据。在调试器中,我可以查看查询并将其复制/粘贴到我的 Oracle 数据库并执行。它按我的预期工作并返回适当数量的行。
问题是在调试器中执行后,我浏览记录集并找到完全不同的数据集(缩减集)。
我的想法是,这是因为我按照图中的描述定义了键。我可以创建有关... the upper bound of the multiplicity of the Dependent Role must be '1' 的错误,还可以通过简单地修改状态表上的键来修改调试器中返回的记录集。
这似乎表明记录关系正在尝试删除状态表中的重复项以创建联接?我试图通过执行 group by trunc(start_date) 或其他类似查询在 Oracle 中重新创建它,但无法找到返回结果的确切行。
它只是证实了我的怀疑,Fluent API 中定义的映射和关系一定是错误的,但我不确定如何正确表示。
最终我只想在 Fluent API 中创建一个 1 -> 1..* 关系。
谢谢!
【问题讨论】:
-
查看类定义会有所帮助。似乎
Status实际上是Area和一些存储“真实”状态的状态表之间的连接类,否则多对多关系似乎更合适。但是从你的描述中很难拼凑出发生了什么。
标签: c# entity-framework linq entity-framework-5 ef-fluent-api