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

时间:2016-11-06 11:26:58

标签: c# linq asp.net-core entity-framework-core .net-core

我目前正在使用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; }
    (...)
}

1 个答案:

答案 0 :(得分:1)

注意:答案实际上是在原始问题的评论中提供的。我只是在这里添加一点,以使其更加清晰可见。

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

在问题中,查询是:

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

id及其对应的属性UserId在这里是有效且相互兼容并不重要,因为正在获取的是整个类User的实例。

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