2016-11-06 106 views
1

我目前正在使用实体框架在.net CORE中创建一个web api。实体框架核心linq查询返回InvalidCastException

每当我试着通过ID与LINQ选择一个记录,我得到以下错误:

An exception of type 'System.InvalidCastException' occurred in Microsoft.EntityFrameworkCore.dll but was not handled in user code.

Additional information: Unable to cast object of type 'System.Int32' to type 'System.Char'.

这个错误发生,每当我执行以下LINQ查询:

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

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

有人能告诉我我在做什么错吗?

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

public class User 
{ 
    public int UserId { get; set; } 
    (...) 
} 
+1

我不认为问题中有足够的信息还没有让这个问题得到解答。至少,表格定义和类定义也是需要的。 – hvd

+0

尝试使用i.UserId.Equals(id)代替i.UserId == id –

+0

@hvd我添加了'User'模型的一部分。 – Max

回答

1

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


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

在的问题,查询是:

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

不要紧,无论id和它相应的属性UserId是有效的,相互兼容这里,是因为什么被取出是的一个实例全班User

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

+0

我已将此标记为解决方案。谢谢! – Max