我正在使用 ADO.NET 实体框架构建一个 ASP.NET MVC 站点。我有一个包含这些实体的实体模型,由外键关联:
报告(ID、日期、标题、Report_Type_ID 等)
- SubReport(ID, ReportText, etc.) - 与 Report 的一对一关系。
- ReportSource(ID, Name, Description) - 与 Sub_Report 的一对多关系。
- ReportSourceType(ID, Name, Description) - 与 ReportSource 的一对多关系。
- 联系人(ID、姓名、地址等) - 与 Report_Source 的一对一关系。
- ReportSource(ID, Name, Description) - 与 Sub_Report 的一对多关系。
每种类型的 SubReport 都有一个 Create.aspx 页面。post 事件方法返回一个新的 Sub_Report 实体。
之前,在我的 post 方法中,我遵循了这个过程:
- 从页面的字段中设置新报告实体的属性。
- 从页面的字段中设置 SubReport 实体的特定属性。
- 将 SubReport 实体的 Report 设置为 1 中创建的新 Report 实体。
- 给定页面提供的 ID,查找 ReportSource 并将 Sub_Report 实体的 ReportSource 设置为找到的实体。
- 保存更改。
这个工作流程成功了几个星期。然后上周发生了一些变化,它不再起作用了。现在,我得到了这个异常,而不是保存操作:
UpdateException:“'DIR2_5Entities.ReportSourceSet' 中的实体 参与“FK_ReportSources_ReportSourceTypes”关系。 找到 0 个相关的“ReportSourceTypes”。1 'Report_Source_Types' 是预期的。”
调试可视化工具显示以下内容:
- SubReport 的 ReportSource 已设置并加载,其所有属性均正确。
- Report_Source 附加了一个有效的 ReportSourceType 实体。
在 SQL Profiler 中,准备好的 SQL 语句看起来没问题。谁能指出我缺少什么明显的东西?
TIA
注意:在这种情况下,报表和子报表始终是新实体。报告实体包含许多类型的报告共有的属性,用于一般查询。子报表是特定的报表,其额外参数因类型而异。每种类型的 SubReport 实际上都有不同的实体集,但这个问题适用于所有类型,因此我使用 SubReport 作为简化示例。