Entity FrameworkのコアlinqクエリはInvalidCastExceptionを返します

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

質問

私は現在、Entity Frameworkで.net COREのWeb APIを作成しています。

linqでIDでレコードを1つ選択しようとすると、次のエラーが表示されます。

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; }
    (...)
}

受け入れられた回答

注:答えは実際に元の質問の下のコメントで提供されました。私はそれをもっと見やすく明瞭にするためにここに少し追加しています。


Entity Frameworkは明らかに、各テーブルのさまざまな列を表すプロパティを使用して、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は合法ですか? はい、理由を学ぶ