繁体   English   中英

Entity Framework Core linq 查询返回 InvalidCastException

[英]Entity Framework Core linq query returns InvalidCastException

我目前正在使用实体框架在 .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);

我已经检查过,字段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表中具有相同名称的列的类型不兼容,因此尝试映射到它会引发上述异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM