2010-12-01 76 views
3

目前,我有一個SQL Server 2005的表,看起來有點像:在SQL Server表C#枚舉使用值

 
ID | name | desc 
---------------------- 
1 | ONE | Value One 
3 | THREE | Value Three 
5 | FIVE | Value Five 

此表在C#中的枚舉,看起來像對應:

enum MsgTypes{ 
    <summary>Value One</summary> 
    ONE = 1, 
    <summary>Value Three</summary> 
    THREE = 3, 
    <summary>Value Five</summary> 
    FIVE = 5 
} 

所以我的問題是這樣的:有沒有一種很好的方法將枚舉關聯到SQL表,以便表中的值的任何更改/添加不需要手動在c#代碼中進行?

+0

表中需要在C#代碼中鏡像哪些類型的更改?你在尋找可能改變與'MsgTypes.ONE`關聯的ID嗎? – StriplingWarrior 2010-12-01 20:25:41

+0

在我的情況下,我認爲ID最不可能改變(儘管我不想說這是不可能的)。更可能的情況是名稱改變或添加新名稱。即「MsgTypes.ONE」變爲「MsgTypes.UNO」或「MsgTypes.TWO」被創建。 – chezy525 2010-12-01 20:49:54

回答

11

如果你想讓它變得有點動態,爲什麼要把它作爲一個枚舉開始呢?只需從應用程序啓動時的表格中獲取詳細信息,並在(例如)Dictionary<int, string>中記住它們。如果你願意的話,你總是可以將值封裝在自己的值類型中,強制範圍。

或者,如果您不介意重新編譯,您可以在建立時間獲取它並自動生成枚舉源代碼。

3

最近我不得不想一些類似的東西(refactoring an enum) - 基本上我考慮使用字典<A, B>來存儲枚舉值。如果需要,可以從表中動態加載以填充字典。

我要補充的一件事是 - 如果你用一些動態的東西來替換一個已經存在的枚舉,你將不得不考慮你要做什麼來動態地填充異常。

1

對我而言,取決於枚舉/數據庫查找表更改的頻率。我們對這樣的在我們的系統半打枚舉/查找,我不介意重新編譯以添加emum選項+ DB行監守:

  1. 這並不經常發生 - 在可能的兩倍過去的一年,我能想到
  2. 圍繞新選項通常有新的業務邏輯,因此無論如何編碼都是必需的。
0

另一種替代方法是使用ID,Name和Desc屬性實現自定義對象,以封裝數據庫表。

0

我接受喬恩建議的內容,但如果您希望在數據庫中包含Enum列表並希望在代碼中使用它們,則可以使用nHydrate中的TypeTable功能用於您的項目。