实体框架核心linq查询返回InvalidCastException
本文关键字:返回 InvalidCastException 查询 linq 框架 核心 实体 | 更新日期: 2023-09-27 18:16:39
我目前正在创建一个web api在。net CORE与实体框架。
每当我尝试使用linq按ID选择单个记录时,我都会得到以下错误:
类型为'System '的异常。InvalidCastException'发生在Microsoft.EntityFrameworkCore.dll,但未在用户代码中处理。
附加信息:无法强制转换"System"类型的对象。Int32"输入"System.Char"
当我执行以下linq查询时,这个错误就会发生:
int id = 1;
User user = context.Users.First(i => i.UserId == id);
我已经检查过了,字段UserId
和变量id
都是整数。此外,该表包含足够的元素,并且存在id
为1的行。
编辑:这是User
模型的一部分:
public class User
{
public int UserId { get; set; }
(...)
}
注:答案实际上是在原问题下的评论中提供的。我只是在这里添加了一点,让它更清晰可见。
实体框架显然通过表示每个表中不同列的属性将c#类映射到数据库表。现在,如果其中一个属性的数据类型与数据库中相应列的数据类型不兼容,那么当您试图从该表中获取任何内容时,即使不匹配的属性不直接涉及查找,也会得到System.InvalidCastException
。
问题中的查询是:
User user = context.Users.First(i => i.UserId == id);
这里id
和它对应的属性UserId
是否有效和兼容并不重要,因为被取的是整个类User
的一个实例。
显然,User
中其他属性的类型与数据库中user
表中具有相同名称的列的类型不兼容,因此尝试映射到它时会抛出上述异常。