我有一个实体Person,其枚举“State”的值为“new,accepted,blocked”。实体框架代码首先在人员表上创建一个字段,其中1表示新的,2表示已接受,3表示已阻止。只要我在代码视图中就可以了。每当我需要修复数据库时,“1”没有任何意义,我需要先在代码中查找1对于该枚举的含义。
我的第一个想法是简单地为这些枚举创建一个单独的表,并使枚举成为一个带有id和枚举的类。但是我在需要枚举的每个查询上得到另一个(不必要的)连接。我想避免这种情况。
那么,是否可以为具有修复ID的枚举创建一个单独的表,以便枚举表的id等于枚举的值,并且仍然使用常规方法使用实际框架,它只使用值枚举作为保存值?当我想使用外键来强制执行引用完整性以确保没有人忘记更新枚举表时,我陷入困境。实体框架不能设置这个外键,因为它不知道表,当它知道它时,它会产生我不想要的关系,因为连接...
答案 0 :(得分:0)
尝试以下代码
Module Module1
Enum MyEnum
a = 1
b
c
d
e
f = 100
End Enum
Sub Main()
Dim x As MyEnum = MyEnum.d
Console.WriteLine(x)
Console.ReadLine()
End Sub
End Module
答案 1 :(得分:0)
过去的几年,我学到了很多东西。因此,如果有人看到这个问题并感到好奇,那么这就是我到目前为止通常所做的事情。
因此,除非有特殊原因要真正为代码(枚举)值提供一个表(例如当您有其他数据而不只是一个代码时),否则我只是将枚举值放入使用枚举的表中。例如在上面的示例中,人员表获取枚举值的整数列。在带有实体框架的C#中,我像这样使用它:
// write to db:
personEntity.PersonState = (int)State.New;
// read from db, e.g.:
if (personEntity.PersonState == (int)State.New {
// logic here
}
// or if you need the value as enum:
State personState = (State)personEntity.PersonState;
我发现在大多数情况下,这是一种好方法。