【发布时间】:2022-04-19 18:57:30
【问题描述】:
所以这是查询:
from c in Contents
join cs in DepartmentSharings
on c.ContentId equals cs.ContentId
select c.PrivateCategoryId.Value
当我运行它时,我得到:
处理请求时数据库操作失败。 InvalidOperationException:读取一个异常时发生 属性“DepartmentSharing.ContentId”的数据库值。这 预期类型为“System.Int32”,但实际值为 null。
现在我检查了数据库中的DepartmentSharings.ContentId 字段,即fk, int, not null。在课堂上是public int ContentId { get; set; }。 DepartmentSharing.ContentId 不能是 null。此外,在 LinqPad 中,我可以看到它在失败之前返回 58 行。
为什么会出现此错误?
【问题讨论】:
-
我对那个错误消息持怀疑态度,因为为此生成的 SQL 将 没有理由 获取该值 - 这只是
join的一部分- 类似select c.PrivateCategoryId from Contents c inner join DepartmentSharings cs on c.ContentId = cs.ContentId。你确定真正的问题不是PrivateCategoryId是null? -
如果您可以看到它在失败前返回 58 行,您可能需要查看第 59 行中的数据,看看它的样子以及它是否看起来很有趣......
-
你能否捕获使用分析器触发的 sql 查询并直接在 ssms 中运行以快速检查结果
-
我想是这个:
select c.PrivateCategoryId.Value。c.PrivateCategoryId可能为空。 -
@MarcGravell 那是 EF Core,如果它不能翻译它可以在内存中执行查询(而且它不能经常),所以也许真正的 OP 查询有点复杂,或者,怎么知道,也许由于某种原因,EF Core 甚至无法翻译这个(例如,我们不知道
Contents和DepartmentSharings是什么)。
标签: c# linq asp.net-core-2.0