我有List<object>
枚举列表,这是我写的一些模式匹配代码的结果。
我的问题是我想在数据库中保存这个枚举列表,以便将来可以再次应用这种模式,但我有点不知道如何做到这一点。
枚举列表包含不同的枚举,例如:
EnumType1.SomeVaue
EnumType2.SomeValue
此外,我不知道有多少枚号或它们的顺序。我正在努力想出一种将其序列化到数据库的好方法,以便稍后可以使用相同的枚举重新创建List<object>
列表以反馈到我的代码中。
我想知道用枚举代表模式段是不是一个坏主意,我应该回去重构所有代码?
我可以将枚举转换为包含枚举类型的字符串,然后将其转换回来吗?
答案 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);
}