使用Entity Framework将枚举名称存储在数据库中

Mr.*_*ble 10 entity-framework entity-framework-6

public enum Currency
  {
     EUR = 1,
     USD = 2,
     GBP = 3
   }
Run Code Online (Sandbox Code Playgroud)

假设我有一个如上所示的枚举.如果我使用Entity Framework(代码优先)使用它,那么int值将存储在数据库中.不存储查找表,也不存储枚举值的字符串名称,这使得难以直接读取数据库数据.

有没有办法让EF为枚举创建查找表?

小智 15

您可以尝试这样更容易的事情......

public enum Currency
{
    EUR = 1,
    USD = 2,
    GBP = 3
}

public class YourClassName
{
    [Column("Currency")]
    public string CurrencyString
    {
        get { return Currency.ToString(); }
        private set { Currency = EnumExtensions.ParseEnum<Currency>(value); }
    }

    [NotMapped]
    public Currency Currency;
}

public class EnumExtensions
{
    public static T ParseEnum<T>(string value)
    {
        return (T)Enum.Parse(typeof(T), value, true);
    }
}
Run Code Online (Sandbox Code Playgroud)

来源:Bryan Hogan的例子

  • 我喜欢,但是后来我会:) (2认同)

Iro*_*n84 2

就在这里。您必须将该表添加到您的配置中,然后确保使用反射将所需的值植入到表中。然后,只需在查找表和您使用枚举的任何表之间创建 FK 关系,您就应该完成设置了。

这篇文章中有一个很好的编码示例。这可能会帮助您开始。

  • 谢谢。这看起来很痛苦:p 我希望能够在配置中的某个地方轻弹一个标志:) (2认同)