我有我的asp.net MVC Web應用程序內的庫法,自動生成一個唯一的序列號被稱爲標籤: -替代使用MAX + 1創建一個用戶友好的唯一的序列號
public void InsertOrUpdateServer(TMSServer server, string username)
{
if (server.TMSServerID == default(int))
{
// New entity
int technologyypeID = GetTechnologyTypeID("Server");
Technology technology = new Technology
{
IsDeleted = true,
Tag = "S" + GetTagMaximumeNumber(technologyypeID).ToString(),
StartDate = DateTime.Now,
};
Save();
//code goes here
在哪裏在GetTagMaximumeNumber()函數是: -
public int GetTagMaximumeNumber(int typeID) {
string s = tms.Technologies.Where(a => a.TypeID == typeID).Max(a2 => a2.Tag.Substring(1));
if (s != null)
{
return Int32.Parse(s) + 1;
}
else {
return 100;//if this is the first record created
}}
以上將獲得標籤的最大數加1,然後嘗試將其保存到數據庫中。上述方法運行良好,但我確信在生產服務器上多個用戶將添加記錄時,將生成相同的標記號,並在嘗試添加數據庫中已存在的自動生成的標記號時引發異常。 所以,我有以下問題:-1
什麼是我可以跟着有一個序列號,始終是唯一的其他方法。
在我目前的方法中,標籤號碼中的空白是最小的。只有當用戶刪除記錄並且其標籤號不是最大值時纔會出現間隙。那麼有沒有辦法在任何新方法中仍然有這種方法,所以差距會很小?
感謝您的幫助。
可以使用['AUTO_INCREMENT'](http://www.w3schools.com/sql/sql_autoincrement.asp) – amdixon
當然,如果刪除了一行,它* *是最大值,那麼你最終(在兩個不同的時間點)與兩個具有*相同*標記的實體。這可能是也可能不是問題,但值得記住。 –
@amdixon自動增量在我的情況下不起作用,因爲我的標籤編號以字符串爲前綴。所以我可能有兩個具有相同整數的標籤,但是它們的第一個字符串如S100和R100不同。所以我沒有使用auto_increment出於這個原因。 –