4

私はここ数年Linq2Sqlを使用していて、DBにintortinyintフィールドがあるなど、DBMLファイルで列挙型に再定義するいくつかの機能に慣れているので、SQLを実行すると便利です。列挙型と直接比較してクエリを実行します(この件に関する3年前の私の質問と、そこにある回答については、こちらを参照してください)。

今、私はEntity Framework 5を使用してプロジェクトを開始しています。EFはL2Sでは得られなかった多くのことを正しく行っているようですが(たとえば、デタッチ/再アタッチ)、簡単ではないように思われることに失望しています。そのようなフィールドのC#タイプを列挙型に変更する方法。

誰かがこれをきれいに行う方法を見つけたので、私は次のようなクエリを持つことができます:

var q = entities.Things.Where(t => t.Status == TStatus.Closed);

int(いいえ、キャストしたりbyteインラインにしたりする必要はありません)。

4

1 に答える 1

5

コードファースト

EF5 Code First は、.NET 4.5 で列挙型プロパティをサポートします。次のエンティティはint、データベースにフィールドを作成します。

public class Event
{
    public int EventId { get; set; }
    public Status Status { get; set; }
}

public enum Status
{
    Open,
    Closed,
    Pending
}

次のクエリを実行できます。

db.Events.Where(e => e.Status == Status.Pending)

データベースファースト

この投稿で説明したように、Database First で同じことを実現する方法を次に示します。

モデル ブラウザーに移動して新しい列挙型を作成し、それを使用する列に移動して、その型を作成した列挙型に変更します。

于 2012-09-11T14:24:20.647 に答える