【问题标题】:Convert Enum From String To Int In DB Then Back To String - Entity Framework Core 3将枚举从字符串转换为数据库中的 Int 然后返回字符串 - Entity Framework Core 3
【发布时间】:2020-04-17 20:38:11
【问题描述】:

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

    public enum Type
    {
        TypeA,
        TypeB,
        TypeC
    }

我使用 Fluent API 和 Entity Framework 3.0:

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

这会转换传入的字符串并将其作为 int 保存在数据库中。但是,当我进行查询以将其从数据库中拉出时,它会保持一个 int。

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

如何获取 Enum 的字符串 - 将其转换为 DB 的 int - 然后在查询 DB 时接收字符串?

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

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

谢谢。

【问题讨论】:

标签: c# entity-framework enums entity-framework-core asp.net-core-webapi


【解决方案1】:

您不需要使用转换器,EF Core 将 Enums 存储为 Integer。因此,不再需要使用.HasConversion&lt;int&gt;();。 EF Core 将此值作为整数读取,并在您发送查询时将其转换为 Type。因此,您有一个Type,您可以使用Type.Sample.ToString() 来使用字符串值。

【讨论】:

  • 感谢您的回答。你是对的,我不需要那个。是我的前端 TypeScript Enum 将其转换回一个数字。所以它再次从我的 API 中输出一个字符串,然后在前端一个 TS Enum 将它转换回一个数字。现在要弄清楚如何不将其转换回数字。感谢您的帮助!
【解决方案2】:

这将返回枚举字符串:

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

【讨论】:

  • 感谢您的回答,但这不是我要问的。不过我很感激!
猜你喜欢
  • 2017-07-07
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2018-11-24
相关资源
最近更新 更多