2016-09-20 41 views
0

我有List<object>枚舉的列表,這是我寫的一些模式匹配代碼的結果。保存數據庫中的枚舉列表

我的問題是,我想保存在數據庫中的枚舉列表,所以這種模式可以在未來再次應用,但我有點困惑如何做到這一點。

的枚舉包括不同枚舉,例如:

EnumType1.SomeVaue 
EnumType2.SomeValue 

此外,我不知道他們有多少枚舉或以什麼順序。我正在努力想出一個很好的方法將這個序列化到數據庫,以便稍後可以使用相同的枚舉重新創建列表,以反饋到我的代碼中。

我想知道如果使用枚舉表示模式段是一個壞主意,我應該回去重構所有的代碼?

我可以將枚舉轉換爲包含枚舉類型的字符串,然後將其轉換回來嗎?

+0

你需要知道如何保存'enums'上數據庫還是什麼? – Sampath

+0

我想按照確切順序存儲枚舉列表。我可以將枚舉設置爲屬性,但我希望將枚舉列表保存在一起,以便稍後重新創建。 – Guerrilla

回答

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


} 

在數據庫中你將有寵物的表爲整數。整數值這是將被保存。那麼當你拉枚舉()的值的枚舉會自動知道它是狗..我希望是有道理的......新計算器上啄:))

編輯這整個應答: 好吧,如果你有多種類型列表中枚舉的,你可以有持有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); 

}

+0

我在列表中有多個不同的枚舉類型,所以它不起作用。 – Guerrilla

+0

感謝您的幫助。我將不得不考慮從字符串創建枚舉類型,我不知道如何扭轉過程。 – Guerrilla

+0

@Guerrilla已編輯我的答案,我希望這可能有助於..可能有一個表中的枚舉「名稱」和值,然後你可以找出枚舉和int類型,並獲得您想要的枚舉值的方式? – DaveHutchy