2010-12-01 11 views
3

内の値を使用して:C#のEnum、私は少しのように見えますSQL Server 2005のテーブル持っている現時点ではSQL Serverのテーブル

enum MsgTypes{ 
    <summary>Value One</summary> 
    ONE = 1, 
    <summary>Value Three</summary> 
    THREE = 3, 
    <summary>Value Five</summary> 
    FIVE = 5 
} 
:この表は、のように見えるC#での列挙型に対応する

 
ID | name | desc 
---------------------- 
1 | ONE | Value One 
3 | THREE | Value Three 
5 | FIVE | Value Five 

私の質問は次のとおりです。列挙型をSQLテーブルに関連付けることで、テーブル内の値の変更や追加をC#コードで手動で行う必要はありませんか?

+0

テーブルのどのような変更がC#コードに反映される必要がありますか? 'MsgTypes.ONE'に関連付けられたIDを潜在的に変更しようとしていますか? – StriplingWarrior

+0

私の状況では、IDは変わる可能性が最も低いと思います(私は不可能だと言っているわけではありませんが)。可能性の高い状況は、名前が変更されるか、新しい名前が追加されることです。 'MsgTypes.ONE'が' MsgTypes.UNO'に変更されるか、 'MsgTypes.TWO'が作成されます。 – chezy525

答えて

11

これはやや動的になりたいのであれば、なぜそれを列挙型にするのですか?アプリの起動時にテーブルから詳細を取得し、Dictionary<int, string>で覚えておいてください。必要に応じて、範囲を強制する独自の値型内で常に値をカプセル化することができます。

また、再コンパイルを気にしない場合は、ビルドにフェッチし、列挙型ソースコードを自動生成できます。

+0

+1いいですね。 –

3

最近では、類似したことについて考える必要がありました。(refactoring an enum) - 基本的には、辞書<A, Bを使用して列挙型の値を格納することを検討しました。

私が追加することの1つは、すでに存在する列挙型を動的に置き換える場合は、動的に入力する例外の一部として発生したことを考えなければならないことです。

1

私には、enums/DBルックアップテーブルの変更頻度によって異なります。我々は、我々のシステムでは、このような半ダースの列挙/検索について持っている、と私はbecuase emumオプション+ DBの行を追加して再コンパイルする気にしない:それは非常に頻繁に発生しません

  1. - おそらく二回で私が考えることができる過去の年
  2. 新しいオプションを取り巻く新しいビジネスロジックがありますので、とにかくコーディングが必要です。
0

また、データベーステーブルをカプセル化するID、名前、およびDescプロパティを持つカスタムオブジェクトを実装することもできます。

0

Jonが提案しているものを受け入れますが、DBにEnumリストを持ち、コード内で使用したい場合は、nHydrateTypeTableフィーチャーをプロジェクトに使用できます。

関連する問題