どうやらint <-> enum
EF4の最初のリリースではサポートされないようです。私はこれが悪いと言う人たちに同意します。
キャスティングを行うプロパティを使用しています
public partial class MyEntity
{
public MyEnum HurrEnum {get{return (MyEnum)Hurr;} set{Hurr = (int)value;}}
}
ものに「正しく」名前を付ければ、それほど悪くはありません(つまり、ばかげているようには見えません)。たとえば、データベースにReasonとして格納されているReasonCode列挙型があるため、プロパティのReasonバージョンとReasonCodeバージョンがあります。今のところ、十分に機能します。
まず、EF4を使い始めたばかりなので、EF4の仕組みに詳しくありません。L2Sに似ていますが、エンティティのサポートが優れていると思います。これを一粒の塩と一緒に取ってください。
明確にするために、このプロパティは便宜上のものであり、このプロパティを使用してデータベースにクエリを実行しようとすると、EFが正しく反応しないと90%確信しています。EFはあなたのプロパティを知らないので、SQLを構築するためにそれを使用することはできません。したがって、この:
var foo = from x in Db.Foos where x.HurrEnum == Hurr.Durr select x;
これが発生すると、おそらく期待どおりに動作しなくなります。
var foo = Db.Foos.Where(x=> x.HurrEnum == Hurr.Durr);
おそらく、Foosテーブル全体がメモリに取り込まれてから解析されることになります。 このプロパティは便宜上のものであり、データベースがヒットした後にのみ使用する必要があります。 そのような:
// this is executed in the sql server
var foo = Db.Foos.Where(x=> x.Hurr == 1 || x.Hurr == 2).ToArray();
// this is then done in memory
var hurrFoos = foo.Where(x=> x.HurrEnum == Hurr.Durr);
違いがここにあることを理解していない場合は、火で遊んでいます。EF / L2Sがコードを解釈し、それをSQLステートメントに変換する方法を学ぶ必要があります。