在数据库中将枚举从字符串转换为 int,然后转换回字符串 - 实体框架核心 3



我有一个类似于这样的枚举:

public enum Type
{
TypeA,
TypeB,
TypeC
}

我使用Fluent API和实体框架3.0有这个:

builder.Entity<Element>()
.Property(p => p.Type)
.HasConversion<int>();

这将转换传入的字符串并将其作为 int 保存在数据库中。但是,当我执行查询以将其从数据库中提取出来时,它保持为整数。

我已经阅读了文档,但我似乎无法理解:

如何获取枚举的字符串 - 将其转换为数据库的整数 - 然后在查询数据库时收到字符串?

我想也许它正在使用 EnumToNumberConverter,但它需要两个参数,我不知道第二个参数应该是什么。如这些文档所示:https://learn.microsoft.com/en-us/ef/core/modeling/value-conversions

谁能给我一个具体的例子,说明我在存储在数据库中时如何将 Enum 的字符串转换为整数,然后在查询时再次将 Enum 的字符串交给它?

谢谢。

不需要使用转换器,EF Core 将枚举存储为Integer。因此,不再需要使用.HasConversion<int>();。EF Core 将此值读取为整数,并在发送查询时将其强制转换为Type。因此,您有一个Type,您可以使用Type.Sample.ToString()到使用字符串值。

这将返回枚举字符串:

enum E : int
{
Element1 = 42
}
//...
int i = 42;
string s = ((E)i).ToString();// returns "Element1"
//...

最新更新