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

时间:2014-12-16 16:25:29

标签: entity-framework entity-framework-6

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

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

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

2 个答案:

答案 0 :(得分: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);
    }
}

来源:example by Bryan Hogan

答案 1 :(得分:2)

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

this post中有一个很好的编码示例。这可能会帮助你开始。