LINQ查询返回错误“预期的类型为'System.Int32',但实际值为null。”

Shi*_*ror 4 c# linq asp.net-core-2.0

所以这是查询:

from c in Contents
join cs in DepartmentSharings 
on c.ContentId equals cs.ContentId
select c.PrivateCategoryId.Value
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

处理请求时,数据库操作失败。InvalidOperationException:读取属性'DepartmentSharing.ContentId'的数据库值时发生异常。预期的类型为“ System.Int32”,但实际值为空。

现在,我检查了DepartmentSharings.ContentId数据库中的字段fk, int, not null。在课堂上是public int ContentId { get; set; }DepartmentSharing.ContentId不能是null。另外,在LinqPad中,我可以看到它在失败之前返回了58行。为什么会出现此错误?

Chr*_*att 6

唯一会导致该错误的是if ContentId是一个不可为null的int属性,但是以某种方式您的数据库表允许该列的NULL值。假设EF正在处理您的数据库,则不应该发生这种情况,但是您可能在某些时候进行了某些更改并且未正确迁移。

无论如何,您都需要将属性类型更改为int?而不是,int或更改表以使列NOT NULL并确保所有行都具有非NULL值。

  • 这对我在 EntityFrameworkCore 上使用 'context.object.FromSql("Exec dbo.MyProcedure")' 的过程数据库调用对我有用 看起来 Query 是否总是带回结果并不重要,您将始终收到此错误. 正如@Chris 所说,只需更改以下内容即可解决您的问题。公共整数值{得到;放; 公共 int?价值{得到; 放; } (2认同)