EntityFrameworkで何らかの項目をSelectしている箇所で、以下のような例外が発生することを報告されました。
System.ArgumentException: 指定された値は型 'Edm.Int32' のインスタンスではありません
しかし筆者の環境では発生せず。
どうしてだろうと首を傾げつつ調査すると、まさかの事実が発覚しました。
例外の原因自体は「.NET Framework4.0ではEnumが使えないから」という単純なものなのですが、実はそれはプロジェクトで使用するバージョンではなく、
.Net Frameworkのインストールバージョンに依存するものだったのです。
筆者のマシンにインストールされている.NET Frameworkのバージョンは4.5。
例外が発生したマシンにインストールされているのは4.0。
プロジェクト自体は4.0で作成されていますが、それぞれのマシンにインストールされているFrameworkのバージョンが違うため、例外の発生状況が違ってしまっていたもようです。
以下に挙げた参考ページでも、回答の1つに「.NET Frameworkを4.5にしたらコード変えなくてもエラーでなくなったよ(意訳)」というのがありました。
参考:stackoverflow.com(英文)
EF/Linq enum error
Entity framework mapping enum : The specified value is not an instance of type 'Edm.Int32' Parameter name: value
EF/Linq enum error
Entity framework mapping enum : The specified value is not an instance of type 'Edm.Int32' Parameter name: value
結局この例外はEnumをintに置換することで回避しましたが(コードについては参考ページをご覧ください)、チーム内の環境が違うとこういうこともあるんだなーと考えさせられました。
0 コメント:
コメントを投稿