2017-01-30 10 views
0

私はいくつかの静的テーブルを持つデータベース(Oracle)を持っています。私。これらのテーブルの値は読み取り専用です。これらのテーブルは、このような構造を持っている: DBレコードをコードに格納するのは悪い習慣ですか?

FOOD_TYPE_ID       FOOD_TYPE_NAME 
------------------------------------ --------------- 
E34FD113-D793-4EA0-A0D2-6F379D1AAC00 APPLE 
30939FE7-3B8E-4857-A6F8-BBCC37CF293C PEAR 
25B474B4-264D-45D7-9873-F0E73484BA65 GRAPE 
35B00E15-8B5D-4519-ADAC-AC4325E9DE7A MEAT 

そしてFOOD_TYPE_IDの外部キーがある他のテーブルで

私のアプリケーション(C#)にはORM(DbLinq)があります。そして、時には私のようなものを書くことがあります。この場合には、私は常に念頭に置いてFOODテーブルに格納されている正確な名前を維持する必要があるため

if (OrderedFood.FoodType.Name == "APPLE") ... 

それは、しかし、非常に便利ではありません。 (実際のケースでは、これらの名前ははるかに長いです)

私は次のように文字列の束を持つクラスを作成すると思っています。だから私はこのように、このクラスを使用することができるだろう

public static class FoodTypes 
{ 
public const string APPLE = "E34FD113-D793-4EA0-A0D2-6F379D1AAC00"; 
public const string PEAR = "E34FD113-D793-4EA0-A0D2-6F379D1AAC00"; 
public const string GRAPE= "25B474B4-264D-45D7-9873-F0E73484BA65"; 
public const string MEAT= "35B00E15-8B5D-4519-ADAC-AC4325E9DE7A"; 
... 
} 

私はいつも知っている、私はどのようなFOODタイプ(そしてVisual StudioのIntelliSenseもそれを知っているでしょう)。 このケースでは、コード内にDB値が重複していることがわかりますが、これはベストプラクティスではありません。しかし、これを行うことは非常に悪いですか?

また、コード内のDB値を参照する別の方法がありますか?

+0

あります。 'OrderedFood.FoodType.Name'は正しい方法です。無意味なIDでコードを混乱させるのはなぜですか? –

答えて

0

あなたがenumとして必要とするすべてを宣言し、あなたのプロジェクトへの参照を追加することは、Public Library Food.dllを行う方がよいでしょう。

public enum FoodTypes 
{ 
    APPLE, 
    PEAR, 
    GRAPE, 
    MEAT, 
    ... 
} 

これで、データベースレコードと同様のクラスにレコードがあるかどうかを確認する必要はありません。ケースチェックなどはありません。
EDIT:
それぞれにIDを追加して、注文履歴をデータベースに格納することができます。

Apple = 1, 
Meat = 2 
関連する問題