在代码中存储常量DB记录 - 这是不好的做法吗?

时间:2017-01-30 02:27:54

标签: c# database orm

我有一些带有一些静态表的数据库(Oracle)。即这些表中的值是只读的。这些表的结构如下:

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)。有时我必须写一些类似的东西:

if (OrderedFood.FoodType.Name == "APPLE") ...
但是,这不是很方便,因为在这种情况下,我总是需要记住存储在FOOD表中的确切名称。 (在实际情况中,这些名称要长得多)

我正在考虑创建一个包含大量字符串的类:

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";
...
}

所以我可以像这样使用这个类:

if (OrderedFood.FoodType.ID == FoodTypes.APPLE) ...

在这种情况下,我将永远知道我拥有的FOOD类型(以及Visual Studio的IntelliSense也会知道它)。 我知道在这种情况下我在代码中复制了DB值,这显然不是最佳实践。但是,这样做是否非常糟糕?

也许还有另一种方法来引用代码中的DB值?

1 个答案:

答案 0 :(得分:0)

最好做公共库Food.dll,它会声明你需要的所有内容,并添加对你的项目的引用。

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

所以在那之后你不需要检查你是否在类中记录类似于数据库记录,没有案例检查等。
编辑:
您可以为每个ID添加ID以在数据库中存储订单历史记录。

Apple = 1,
Meat = 2