0

私は、フロントエンドにドロップダウン選択(値としてIDがあり、FriendlyNameDescription)である必要があるビジネスロジックの一部としていくつかのリストがあると悩んでいます。TypeLists with Entity Framework

さらに、私は、保存されたデータベースの選択に基づいて、ビジネスロジックの中でさまざまなことを行います。つまり、自分のコードのIDと一致するGlobalConstantsまたはEnumsが必要です。

私はEnumsを使用する必要がありますか?EFを使用する場合は、単一リストごとにテーブルを作成するか、TypeListとTypeListItemという一般テーブルを作成しますか?

答えて

0

この回答はあなたの問題に具体的な解決策を提供していませんが、私はそれがあなたにいくつかのヒントを与えることを願っています。

この問題については、this oneなど、いくつかの投稿があります。一般的な方法は、コード内に列挙型を持ち、列挙型の拡張情報(表示名やその他のデータなど)を格納し、データベース表に列挙型の変更を適用して列挙型にすることですカスタムコードを使用してコンテンツを作成します(SQLスクリプトを手動で記述する必要はありません)。

EF6は、このためにすぐに使用できるソリューションを提供していません。その同期カスタムコードを実装するいくつかのNugetパッケージがあります。私はそれらを使用していないので、私はあなたにそれらのアドバイスを与えることはできません。

また、リストの変更頻度、リストのサイズ、表示するにはかなりの名前が必要なのか、その他の余分なデータが必要なのか、ユーザーがリストを変更できるようにするか実行時にこれらのデータを動的に変更する(コードの変更/コンパイル/公開なし)、使用しているEFのバージョンなどを必要とするかどうかにかかわらず、開発者によってのみ行われます。EFの将来のバージョンでは、これをサポートします。

上記のFriendlyName拡張データと上記の複雑なシナリオが1つしかない場合は、おそらくデータベーステーブルなしで管理できます。たとえば、各リストには列挙型を使用できます。拡張子には、余分なデータを格納する列挙型の配列または辞書を定義することができます。値のリストが変更されるたびに、コード内のそれらのデータを更新する必要があります。

例の二つの値を持つ単純な列挙型CategoryStatusため、このの実装とと(翻訳テキストにリソース値を使用することができます)余分なLocalizedName項目:

public enum CategoryStatus 
{ 
    Active = 0, 
    Inactive = 1 
} 

public static class CategoryStatusExtension 
{ 
    private static string[] localizedNames = new string[] { 
     Resources.Strings.CategoryStatus_Active, 
     Resources.Strings.CategoryStatus_Inactive 
    }; 

    public static string LocalizedName(this CategoryStatus self) 
    { 
     switch (self) 
     { 
      case CategoryStatus.Active: 
       return localizedNames[0]; 
       break; 

      case CategoryStatus.Inactive: 
       return localizedNames[1]; 
       break; 
     } 
     return null; 
     //int index = (int)self - 1; 
     //return localizedNames[index]; 
    } 
} 

あなたはこのようにそれを使用します

var categoryStatus = CategoryStatus.Active; 
var textToUse = categoryStatus.LocalizedName(); 

コメントアウトされたコードのように、明示的なswitchを使用する代わりに、値の検索をもう少し自動化する方法を見つけることもできます。

すべての列挙型に対して1つのテーブルのみを使用することについては、そのような考慮事項の種類によっても異なります。あなたのリストが小さければ、あなたはそれらの多くを持っていないし、将来新しいリストをたくさん得られないでしょう、そして、あなたはおそらくそれぞれの列挙に対して別々のテーブルを使うべきです。別のテーブルを使用すると、あなたのコードが書込み/保守が容易になると思います。