【问题标题】:Creating an enum/class from a Database Table从数据库表创建枚举/类
【发布时间】:2012-07-14 23:16:52
【问题描述】:

我有一个基本上包含不同类型事物的数据库表。我将以动物为例。我有一个名为 AnimalTypes 的表:

AnimalTypes
{
     ID:int,
     Name:string
}

然后我填充它:

1:Dog,
2:Cat,
3:Fish

然后我想创建某种 C# 对象,从数据库中完全读取类似于此枚举的函数:

enum AnimalTypes
{
     Dog = 1,
     Cat = 2,
     Fish = 3
}

有没有办法从数据库表中创建枚举/类,如所述?我基本上希望能够使用 intellisense 和 AnimalTypes.Dog 作为示例来引用 AnimalTypes 表中的内容;我实际上并不需要一个枚举,只需要像一个这样的功能。这可能吗?

编辑:正如我在其他相关问题中看到的那样,我对生成 DLL 并没有那么兴奋。我觉得这应该可以通过反思来实现。

假设我不需要智能感知。

【问题讨论】:

标签: c# database


【解决方案1】:

如果您希望能够在编译时使用枚举或类,则必须生成程序集。反射发生在执行时,所以不会给你智能。

这是一个常见问题 - 数据库表中有一组不同的值,这些值不会经常更改,因此在源代码中将它们建模为 enum。这允许以非常易读的方式轻松使用这些有些静态的值。问题是,当值确实发生变化时,如果 enum 也发生变化就好了。

尝试使enum 和数据库保持同步的问题在于,自动过程不会改变这样一个事实,即如果您要更改数据库,那么您不太可能这样做而不必推出新的代码来利用更改的值。最好将这些值建模为 enum 并仍然将它们存储在数据库中。只需在需要时手动同步它们。

【讨论】:

  • 有没有更好的方法来解决维护两个列表的问题,一个在 C# 中,另一个在 DB 中?
  • 我不明白为什么要以两个列表开头,要么放在 DB 中,要么放在 C# 中。
  • 这不是我真正听到的答案,但它仍然是一个答案。我会留下我的问题,以防其他人有任何其他答案。如果明天没有更好的解决方案,我会标记你的正确。
  • @Phil:我需要在 C# 中有一个枚举,然后在数据库中创建一个包含枚举的确切内容的表。我基本上有具有类型的实体(动物)。根据存储在数据库中的类型,我在代码中做了一些不同的事情。就像if (Animal.AnimalType == AnimalType.Fish) {//drawFish()} 这里 Animal.AnimalType 在数据库中,而 AnimalType.Fish 是一个枚举。
  • 我见过两者都使用过——数据库值可用作外键,而枚举可用于使应用程序代码更具可读性。
【解决方案2】:

试试这个解决方案:

为查找表使用 T4 代码生成。

【讨论】:

  • 好东西,但是请写一个简短的描述它是如何工作的,将来链接可能会被破坏。
【解决方案3】:

如果你不想走反射路线,总有代码生成:http://www.mygenerationsoftware.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多