2014-06-22 45 views
1

在我們的應用程序中,我們使用enum作爲類型來定義特定Office活動中涉及的幹事,例如: 在安全活動中,涉及的角色可以是安全主管,控制主管,安全經理等...在C#/ SQLServer應用程序中按位填充全長

這個細節是完全可配置的,所以我們可以添加另一個官方角色的UI在我們的系統活動只需添加特定位bitwrise值,這個值存儲在一個字段Activity表,所有類型都存儲在一個sql表中;此字段使用一些存儲procudure,以及一些商業智能是基於這個領域

[Flags] 
public enum eFatEnumBW : long 
{ 
    None = 0, 
    SecurityOfficer = 1L << 0, 
    SecurityAssistant = 1L << 1, 
    //...some referee of every type you can immagine 
    LastAssistantAtTheMoment = 1L << 63, 
    //... 
} 

現在我們的脂肪bitwiseenum完全飽和,以及我們的客戶都recentely要求添加新類型官員的角色來管理的新活動。

我知道,這不是管理這種情況的最好方法,這個選擇從8年沒有問題到位,沒有人能想象事情會如何發展,現在我們正在等待完全改寫我們的應用程序,但同時我們必須繼續保持舊的應用程序而沒有什麼變化。

我認爲我們可以根據這個BW簡單地改變我們的long在我們的代碼中使用ulong,並且在SQL方面使用numeric(20,0),這可能會給我們很大的餘量。

在我的結論中有些東西我錯過了,這會導致解決方案不適用?

在此先感謝您的建議

+0

'ulong'和'long'具有相同的位數,所以我沒有看到如何切換到'ulong'會讓您將額外的信息擠入您的標誌組合。 – dasblinkenlight

+2

最多可以得到1位,但只要簡單地使用負值即可。 –

+0

謝謝你的回答和評論 – InferOn

回答

1

我不知道如何從longulong會有所幫助。兩種類型都有相同的位數,而且你已經用完了所有的AFAIK。充其量,你會獲得符號位,但這不是一個長期的解決方案。

一種可能的解決方案是引入了兩個新的數據庫表:

  • RefereeTypes(其爲每個enum值中的一個條目);
  • FooReferees(正:短語關聯表是對您的業務實體,每個實體業務實體鏈接到1個或多個RefereeTypes

在你的代碼,而不是enum性能,你必須的RefereeType收藏..這可能意味着相當重寫。

1

我不認爲你錯過任何東西。事實上,此刻的你不使用long的全尺寸,因爲你沒有使用低於0.1

而不是使用ulong的範圍內,你可以選擇使用long繼續,但開始使用負值。

但正如評論中所述,這隻會獲得1位,所以不是真正有助於長期的事情。