我目前正在使用Entity Framework在.net CORE中创建一个web api。
每当我尝试使用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; }
(...)
}
答案 0 :(得分:1)
注意:答案实际上是在原始问题的评论中提供的。我只是在这里添加一点,以使其更加清晰可见。
实体框架显然通过表示每个表中各个列的属性将C#类映射到数据库表。现在,如果其中一个属性的数据类型与数据库中相应列的数据类型不兼容,那么在尝试从该表中获取任何内容时,您将获得System.InvalidCastException
,即使不匹配的属性不是直接的参与查询。
在问题中,查询是:
User user = context.Users.First(i => i.UserId == id);
id
及其对应的属性UserId
在这里是有效且相互兼容并不重要,因为正在获取的是整个类User
的实例。
显然User
中某些其他属性的类型与数据库中user
表中具有相同名称的列的类型不兼容,因此映射到它的尝试会抛出上述内容例外。