(株)アイジュピタ情報ライブラリ

EntityFrameworkにおけるSystem.ArgumentException。

ある日、あるプロジェクトでのことです。

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にしたらコード変えなくてもエラーでなくなったよ(意訳)」というのがありました。


結局この例外はEnumをintに置換することで回避しましたが(コードについては参考ページをご覧ください)、チーム内の環境が違うとこういうこともあるんだなーと考えさせられました。

0 コメント: