2016-11-06 15 views
1

現在、Entity Frameworkで.net COREにWeb APIを作成しています。Entity FrameworkコアのlinqクエリでInvalidCastExceptionが返される

私は、LINQでIDによって単一のレコードを選択しようとするたびに、私は次のエラーを取得する:

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の両方が整数です。また、テーブルには十分な要素が含まれ、idが1の行が存在します。

私がここで間違っていることを誰かに教えてもらえますか?

EDIT:

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

私はこの質問に答えるための十分な情報はまだありません。少なくとも、テーブル定義とクラス定義も必要になります。 – hvd

+0

i.UserId == idの代わりにi.UserId.Equals(id)を試してください –

+0

@hvd 'User'モデルの一部を追加しました。 – Max

答えて

1

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


Entity Frameworkのは、明らかに、各テーブル内のさまざまな列を表すプロパティを介してデータベーステーブルにC#クラスをマッピングします。これらのプロパティのいずれかのデータ型がデータベースの対応する列のデータ型と互換性がない場合、不一致のプロパティが外観に直接関与していなくても、そのテーブルから何かをフェッチしようとするとSystem.InvalidCastExceptionが返されます-アップ。問題の

、クエリされました:

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

何をフェッチしていることのインスタンスであるため、両方id、それが財産UserId対応だが、ここでは有効で、相互に互換性があることは問題ではありません。全体クラスUser

Userの他のプロパティの型は、データベースのuserテーブルに同じ名前の列と互換性がありません。したがって、そのマップにマップしようとすると上記の例外がスローされます。

+0

これを解決策としてマークしました。ありがとう! – Max

関連する問題