Entity Framework Core linq 查询返回 InvalidCastException

Max*_*Max 2 c# linq entity-framework-core .net-core asp.net-core

我目前正在使用实体框架在 .net CORE 中创建一个 web api。

每当我尝试使用 linq 通过 ID 选择单个记录时,都会出现以下错误:

Microsoft.EntityFrameworkCore.dll 中出现“System.InvalidCastException”类型的异常,但未在用户代码中处理。

附加信息:无法将“System.Int32”类型的对象转换为“System.Char”类型。

每当我执行以下 linq 查询时,就会发生此错误:

int id = 1;
User user = context.Users.First(i => i.UserId == id);
Run Code Online (Sandbox Code Playgroud)

我已经检查过,字段UserId和变量id都是整数。此外,该表包含足够的元素,并且id存在一个值为 1的行。

谁能告诉我我在这里做错了什么?

编辑:这是User模型的一部分:

public class User
{
    public int UserId { get; set; }
    (...)
}
Run Code Online (Sandbox Code Playgroud)

Kja*_*tan 5

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


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

在问题中,查询是:

User user = context.Users.First(i => i.UserId == id);
Run Code Online (Sandbox Code Playgroud)

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

显然,某些其他属性User的类型与user数据库中表中同名列的类型不兼容,因此尝试映射到它会引发上述异常。

  • 您知道是否有一种实际的方法可以识别该列? (3认同)