實體框架核心linq查詢返回InvalidCastException

.net-core asp.net-core c# entity-framework-core linq

我目前正在使用Entity Framework在.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表中具有相同名稱的列的類型不兼容,因此映射到它的嘗試會引發上述異常。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因