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

问题描述 投票:3回答:1

所以这是查询:

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行。为什么我收到此错误?

c# linq asp.net-core-2.0
1个回答
5
投票

唯一会导致该错误的是,如果ContentId是一个不可为空的int属性,但不知何故,您的数据库表允许该列的NULL值。假设EF正在处理您的数据库,那不应该发生,但是您可能在某些时候改变了某些内容并且没有正确迁移。

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

© www.soinside.com 2019 - 2024. All rights reserved.