保存数据库中的枚举列表

时间:2016-09-20 11:57:16

标签: c# entity-framework entity-framework-6

我有List<object>枚举列表,这是我写的一些模式匹配代码的结果。

我的问题是我想在数据库中保存这个枚举列表,以便将来可以再次应用这种模式,但我有点不知道如何做到这一点。

枚举列表包含不同的枚举,例如:

EnumType1.SomeVaue
EnumType2.SomeValue

此外,我不知道有多少枚号或它们的顺序。我正在努力想出一种将其序列化到数据库的好方法,以便稍后可以使用相同的枚举重新创建List<object>列表以反馈到我的代码中。

我想知道用枚举代表模式段是不是一个坏主意,我应该回去重构所有代码?

我可以将枚举转换为包含枚举类型的字符串,然后将其转换回来吗?

1 个答案:

答案 0 :(得分:0)

您可以将不同的枚举 int 值保存到数据库中。例如

public enum Animal {Dog = 0, Cat = 1, Bird = 2}
public class Person
{
    public Animal Pet {get; private set;}

    public Person()
    {
        Pet = Animal.Dog;
    }

    public void Insert()
    {
        using(var con = DbFactory.CreateConnection(Database))
        {
            con.Query("stored_procedure_here", new { Pet = this.Pet}, CommandType.StoredProcedure);
        }
    }


}

在您的数据库中,您将有一个Pet为整数的表。将保存 Dog 的整数值 0 。然后当你拉出枚举的值( 0 )时,枚举会自动知道它是狗...我希望这是有道理的...对于整个回答stackoverflow的新东西:))< / p>

修改 好的,如果列表中有多种类型的枚举,您可以拥有一个包含 int 值的表,以及另一个包含枚举的类型/名称的列。当你把它拉出来时,你可以有某种逻辑,将它组织成适当的枚举..我猜..

 //Get the Name/Type and the int from the database for example Dog, 0
 string enumName = "Dog";
 int enumValue = 0
 Type enumType = Type.GetType(enumName);
 if (enumType == null)
 {
     throw new ArgumentException("Specified enum type could not be     found", "enumName");
 }

 object value = Enum.Parse(enumType, enumValue);

}