2

イベントとログという名前のテーブルがあります。イベントテーブルは、ID、イベントの説明、およびタイプで構成されます。また、ログにはLogID、EventID(イベントテーブルのIDを参照)、およびtimstampが含まれます。

エンティティフレームワークを使用しています。ログテーブルにエントリを作成するときに、イベントテーブルのログイベントに対応する番号としてイベントIDを指定します。アプリ全体でこのログを使用し続けると、ログに記録されたイベントのイベントIDを覚えるのが面倒になります。これらのイベントIDをコード内の列挙型としてマップし、使いやすさを向上させるために列挙型を使用したいと思います。

このアプローチを使用して列挙型を作成した人はいますか?もしそうなら、それを作成するためのデザインについてのあなたの考えを共有してください。

4

2 に答える 2

2

enum可能ですが、手動で定義する必要があります。

これが適切な設計であるかどうかは、定義するさまざまなイベントの量と時期によって異なります。新しいイベント定義を作成し、コードを変更する必要はありませんか?その場合、enumおそらく悪い考えでしょう。イベントIDのリストが静的で大きすぎない場合は、enum許容可能であり、(私の意見では)さらに推奨されます。

編集:申し訳ありませんが、私が提供したソリューションは、Entity Framework 1.0ではなく、実際にはLINQtoSQLで行われた方法でした。コーヒーが足りなかったに違いない。EFで行われる方法は、部分クラスで適切に型指定されたプロパティを定義することです。

たとえば、データベースにEventType列があり、これをにマップしますenum。以下に示すように、プロパティの名前をデフォルトからにEventType変更しました。EventTypeInt

モデルのEventCalendarテーブルマッピング
(出典:subbot.net

次に、この列のGetterプロパティとSetterプロパティをprivateに設定します(おそらくEventTypeの名前を変更するために使用したプロパティマネージャーウィンドウで)。それが完了して保存されたら、次のコードを使用します。

public enum EventType
{
    Unknown = 0,
    Concert = 1,
    Festival = 2
}

public partial class EventCalendar
{
    public EventType EventType
    {
        get { return (EventType)EventTypeInt; }
        set { EventTypeInt = (int)value; }
    }
}

はい、退屈です。LINQtoSQLモデルでははるかに実用的でした。

于 2009-08-05T05:18:57.137 に答える
0

ENUMSを作成するのではなく、エンティティセットのナビゲーションプロパティとしてENUMSを表すことを検討しましたか?

于 2009-08-05T04:14:19.077 に答える