2008-11-15 40 views
12

我有許多用戶權限在我的ASP.NET應用程序中進行了測試。這些許可值在一個枚舉引用讓我可以方便地測試權限像這樣:如何避免代碼中的Enum值與數據庫中對應值之間的依賴關係?

  • btnCreate.Enabled = PermissionManager.TestPermission(Permission.AllowCreate);

但是,我也有這些權限存儲在數據庫中,因爲我需要掌握更多有關他們的信息,而不僅僅是他們的ID。但是這會在枚舉值和數據庫中的枚舉值之間產生一種可怕的依賴關係,這是對我的應用程序的一個不適當的改變,並且我有問題。有沒有更好的解決這個問題的方法?有沒有人處理過這個?

回答

1

我不知道最好的解決方案是什麼,我想聽聽那個。 我們的解決方案是明確地鍵入比如

public enum MyEnum : int 
{ 
    None =0, 
    Value = 1, 
    AnotherValue =2 
} 

枚舉和整數值保存到數據庫中。例如,當值1被移除時,您仍然可以使用枚舉,並且AnotherValue在數據庫中仍然具有值2。

+0

這就是我所做的,但如果存儲在代碼或數據庫中的整數未更新而更改,則仍然存在問題。 – 2008-11-15 12:10:36

1

或者可能將enumvalues作爲字符串存儲在數據庫中。的ToString();

0

我們使用一個小型應用程序從數據庫生成枚舉代碼(例如:NorthwindEnums.cs)。我們確保在數據庫發生變化時運行它並更新受影響的庫。

我們還嘗試保持我們的枚舉從0開始並按順序排列,以避免C#中的Web服務引用出現問題。

1

使用枚舉值是可以接受的做,只要你從來沒有改變已經分配的值。如果您在.NET中使用標準的基於角色的授權,則仍然依賴數據庫中相應角色表中某些文本字符串的存在。

0

一段時間後,我爲我的公司構建了一個小工具,它可以使用枚舉字段上的屬性來允許與數據庫中的表「同步」。

該工具可以掃描程序集並生成適當的INSERT/UPDATE SQL命令,以便將數據庫與代碼中的枚舉定義同步。

0

我在任何需要作爲枚舉在代碼中訪問的表上添加擴展屬性。然後我使用代碼生成軟件(codesmith,T4,無論)通過查找任何具有此屬性的表來生成我的所有枚舉。任何用於此的表都遵守一些基本規則(必須具有名稱列等),以便代碼生成器知道將哪個列用作枚舉元素的名稱。

一旦將值添加到這些表格中,我們會注意幾乎從不改變它們以避免破壞構建。

相關問題