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

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

假设我有一个上面展示的枚举。如果我使用Entity Framework(code first)来使用它,那么 int 值将存储在数据库中。 不会存储查找表或枚举值的字符串名称,这使得直接读取数据库数据变得困难。

是否有一种方法可以让EF为枚举创建查找表?

如果我想让EF为枚举创建查找表,该怎么办?


尝试这个问题 https://dev59.com/-Ggu5IYBdhLWcg3wrIqR - Tim Abell
2个回答

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);
    }
}

source: example by Bryan Hogan


2
我喜欢它,但那样我就会喜欢 :) - Bryan

2
有的。您需要将表添加到配置中,并确保使用反射将所需的值填充到表中。然后,只需在查找表和任何使用枚举的表之间创建外键关系即可完成设置。这篇文章中有一个很好的编码示例,可能会帮助您入门。请参考:此文章

2
谢谢。看起来很痛苦 :p 我希望能在配置文件中切换一个标志 :) - Mr. Flibble
是的,我知道。我也感到不舒服,但如果您绝对必须在数据库中查看字符串,我想不出其他的方法了。 - Corey Adler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接