2013-10-25 67 views
0

我正在開發使用ASP.NET MVC 4和實體框架5跟蹤錯誤和軟件更改的票務系統。我需要一種方法從一組可能的數字中選擇唯一的號碼。我的想法是創建一套可能的數字和標記號碼,因爲它們被使用並分配給支持票。軟件支持系統的唯一票號

我對生成的所有可能的彩票號碼可以選擇此代碼,但我希望能有前導零,使所有票號有相同的長度:

public static class GenerateNumber 
{ 
    private static IEnumerable<int> GenerateNumbers(int count) 
    { 
     return Enumerable.Range(0, count); 
    } 

    public static IEnumerable<string> GenerateTicketNumbers(int count) 
    { 
     return GenerateNumbers(count).Select(n => "TN" + n.ToString()); 
    } 
} 

我想要的
IEnumerable<string> ticketNumbers = GenerateNumber.GenerateTicketNumbers(Int32.MaxValue);輸出
是這樣的:
TN0000000001



TN2147483647

希望我們不會需要任何東西一樣大Int32.MaxValue,因爲這將意味着我們有太多的錯誤,哈哈。我只是想在可用數字的限制範圍內保證安全。也許我們可以在解決問題後使用重複使用票號的方法。但是,我不知道我對重用的感覺如何,因爲它可能導致稍後提及文檔時出現含糊不清的情況。

考慮到這一套的大小,這是最有效的方法去擁有唯一的門票號碼?

+1

我不知道這是否是一種可能的解決方案,但是您可以使用在DB上插入記錄時生成的相同身份編號(如果您使用IDENTITY作爲表的主鍵),然後格式化以您想要的任何方式生成身份號碼(例如,TN0000001)。這樣,您不需要手動生成票號。 – scubaFun

回答

5

在數據庫中使用標識列 - 這會爲您自動增加。

如果你還需要一個前綴,那麼把它作爲一個單獨的varchar列存儲,然後爲了顯示的目的,你可以連接它(如果這是絕對必要的話,你必需的前導零)。嘗試在varchar字段中存儲遞增的數字會在一天內將你咬在屁股上。


作爲一個附註,爲什麼前導零?如果我正在修理一張票,我想用票號註釋我的代碼。領先的零是一個痛苦 - 爲什麼不只是有TN-123,並且數量會根據需要變得更大?

+0

我不知道爲什麼我沒有考慮在數據庫中使用標識列。而且,前導零不是直接要求。我們在Lotus Notes中擁有現有的票務系統,併爲每個票號添加了前導零。我只是想保持一個類似的格式。然而,新系統並不需要那樣。 –

+0

Lotus Notes - yikes!您是否看過Visual Studio/TFS附帶的內置票務系統? – Paddy

+0

是的,我們已經研究了Visual Studio/TFS中的票務系統,但是我們的票務系統也涉及非軟件相關的問題。我將選擇你的答案,並考慮做一個'Int32.ToString()'格式化來添加前導零。如果沒有意義的前導零,我會離開它們。 –