在 Entity Framework 中使用单独的 Enum Table(entity) 而不加入
Use separate Enum Table(entity) in Entity Framework without join
我有一个实体 Person,它有一个枚举 "State",值为 "new, accepted, blocked"。 Entity framework 代码首先在人员 table 上创建一个字段,其中 1 表示新的,2 表示接受的,3 表示阻止的。只要我在代码视图中就可以了。每当我出于“1”不代表任何原因需要修复数据库时,我需要首先在代码中查找 1 对该枚举的含义。
我的第一个想法是简单地为这些枚举创建一个单独的 table,并使枚举成为一个带有 id 和枚举的 class。但是后来我在需要枚举的每个查询上得到另一个(不必要的)连接。我想避免这种情况。
那么,是否可以为具有固定 id 的枚举单独设置一个 table,以便枚举的 id table 等于枚举的值并且仍然具有 entity framework 使用正常的方法,它只使用枚举的值作为保存的值?当我想使用外键来强制引用完整性以确保没有人忘记更新枚举 table 时,我遇到了困难。 Entity framework 无法设置此外键,因为它不知道 table 并且当它知道时,它会建立我不想要的关系,因为连接..
试试下面的代码
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
几年过去了,我学到了很多东西。因此,如果有人看到这个问题并想知道,这就是我今天通常做的事情。
所以,除非有特殊原因需要 table 作为代码(枚举)值(比如当你有额外的数据而不仅仅是代码时),我只是将枚举值放入 table 使用枚举。例如在上面的示例中,person table 获得了一个用于枚举值的整数列。在带有 entity framework 的 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;
我发现对于大多数情况来说,这是一种很好且简单的方法。
我有一个实体 Person,它有一个枚举 "State",值为 "new, accepted, blocked"。 Entity framework 代码首先在人员 table 上创建一个字段,其中 1 表示新的,2 表示接受的,3 表示阻止的。只要我在代码视图中就可以了。每当我出于“1”不代表任何原因需要修复数据库时,我需要首先在代码中查找 1 对该枚举的含义。
我的第一个想法是简单地为这些枚举创建一个单独的 table,并使枚举成为一个带有 id 和枚举的 class。但是后来我在需要枚举的每个查询上得到另一个(不必要的)连接。我想避免这种情况。
那么,是否可以为具有固定 id 的枚举单独设置一个 table,以便枚举的 id table 等于枚举的值并且仍然具有 entity framework 使用正常的方法,它只使用枚举的值作为保存的值?当我想使用外键来强制引用完整性以确保没有人忘记更新枚举 table 时,我遇到了困难。 Entity framework 无法设置此外键,因为它不知道 table 并且当它知道时,它会建立我不想要的关系,因为连接..
试试下面的代码
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
几年过去了,我学到了很多东西。因此,如果有人看到这个问题并想知道,这就是我今天通常做的事情。
所以,除非有特殊原因需要 table 作为代码(枚举)值(比如当你有额外的数据而不仅仅是代码时),我只是将枚举值放入 table 使用枚举。例如在上面的示例中,person table 获得了一个用于枚举值的整数列。在带有 entity framework 的 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;
我发现对于大多数情况来说,这是一种很好且简单的方法。