2012-03-03 7 views
1

私は2つだけは、C#での列挙型は、ルックアップテーブルの交換を使用することができますことができます(例えば、SportType MatchTypeは)

1-Sports 
2-Match<> 
....... 
In sports table there is columns SportType<br> 
and In Match table there is column MatchType 

オプション1についてdatabase.Takingにいくつかのテーブルを持っている:
私がするためのオプションを持っていますSportTypeとMatchType表作成

2オプション:
及び第二の選択肢は、クレートのSportTypeの列挙型とMatchType

にあります

一部の人々は原因余分にオプション1を好まないあなたは

を示唆して私は何も決めるときあなたはいくつかの要因を考慮する必要がありDropDownLists

+1

あなたの質問は – BrokenGlass

+0

です。私はスポーツサイトを持っています。スポーツを追加したいと思います。私はスポーツタイプのドロップダウンリストをEnums {cricket = 1、Boxing = 2}にバインドする必要がありますか、またはSportTypeテーブルを作成する必要があります(その場合、私は作成しません)列挙型)。 – Ali

答えて

1

にSportType & MatchTypeを表示する必要があるクエリ
に参加しますルックアップテーブルと列挙型または類似のコード内定数の間これらの要素のうちの主なものは、アプリケーションを再デプロイせずにこれらの値を追加または変更する必要性がどの程度あるかという問題です。

コード内の値を使用すると、サロゲートキーを使用している可能性は低いので、コード内で何かのスペルを変更することに決めた場合は、データベース内の不一致データの問題を作成します。

また、これらのタイプをドロップダウンリストに表示する必要があるので、UI親和性の高いバージョン(たとえば単語間のスペースを含む)を表示するためにハッキーになってしまいますので、裸の列挙体の使用をお勧めします。

最も簡単な選択肢は、文字列定数を持つクラスです:

public class SportType 
{ 
    public const string TeamSport = "Team Sport"; 
    public const string IndividualSport = "IndividualSport"; 
} 

より洗練されたオプションが、このユースケースのために、おそらく不要、これらのオブジェクトは、強く型付けされたようにすることです:

public class SportType 
{ 
    private readonly string _description; 

    private SportType(string description) 
    { 
     _description = description; 
    } 

    public static readonly SportType TeamSport = new SportType("Team Sport"); 
    public static readonly SportType IndividualSport = new SportType("Individual Sport"); 

    public static implicit operator SportType(string s) 
    { 
     return new SportType(s); 
    } 

    public static implicit operator string(SportType s) 
    { 
     return s._description; 
    } 

    // equality overrides etc. 
} 

ここでの利点は、これらの値を文字列として使用できることです。

string sportType = SportType.TeamSport; 

変数とパラメータをそのまま文字列として宣言する必要はありません。

public void SetFavoriteSportType(SportType sportType) 

これもまたオプションです。最終的には、アプリケーションをどのようにデプロイするか、これらのデータをどのように変更するかが決まります。

1

enumのアプローチの問題は、新しいSportTypesとMatchTypesを追加する必要があるときだと思います。あなたのドロップダウンがEnumに縛られている場合は、変更するたびに再展開する必要があります

+0

スポーツタイプが列挙するには問題がある可能性があります。ベットするとBetTypeがうまくいくかもしれません。別のタイプのベットのビジネスをサポートするには、とにかく再デプロイする必要があるからです。 "TransactionType" "OptionType"、 "BuySellFlag"のようなものは、(a)変更されていないため、(b)必要な広範囲のプログラミングを変更しているので、enumとしてokです。 – TomTom