2016-11-06 103 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