实体框架核心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; }
    (...)
}

实体框架核心linq查询返回InvalidCastException

注:答案实际上是在原问题下的评论中提供的。我只是在这里添加了一点,让它更清晰可见。


实体框架显然通过表示每个表中不同列的属性将c#类映射到数据库表。现在,如果其中一个属性的数据类型与数据库中相应列的数据类型不兼容,那么当您试图从该表中获取任何内容时,即使不匹配的属性不直接涉及查找,也会得到System.InvalidCastException

问题中的查询是:

User user = context.Users.First(i => i.UserId == id);

这里id和它对应的属性UserId是否有效和兼容并不重要,因为被取的是整个类User的一个实例。

显然,User中其他属性的类型与数据库中user表中具有相同名称的列的类型不兼容,因此尝试映射到它时会抛出上述异常。