2016-06-12 21 views
0

我在ASP.NET MVC中有以下代碼。Alpha數字主鍵

我想我的程序可以保存自動遞增的alpha數字主鍵。

前2個字母必須是'ST',接下來的4個字母必須是自動增量的數字。有什麼辦法可以通過數據註釋來處理這個任務嗎?

public class Student 
{ 
    public int Id { get; set; } 
    public string First_Name { get; set; } 
} 
+0

分裂你的字母數字鍵,然後就遞增int部分並重新連接它 –

回答

0

您必須在您的代碼中爲您在數據庫中輸入的每條記錄生成自己的字母數字鍵。

public string getAlphaNumericKey() 
{ 
    int number = maxidfromDB(); 

    if(number > 0) 
    { 
     return "ST"+ number.ToString("0000"); 
    } 
    else 
    { 
     return "ST0001"; 
    } 
} 
+0

嗯,我試過了,它並不是最好的解決方案。它因爲可以說如果我添加一個記錄和數據庫生成其ID爲_12_和VarcharID爲_ST0012_。 現在,如果我刪除此記錄(ID = 12),然後嘗試添加另一條記錄。 ** maxidfromdb()**函數將返回_11_。系統將生成下一個記錄ID爲_13_,其VarcharID將爲** ST0012 **,這與生成VarcharID的Orignal目的衝突 –

0

你可以讓數據庫處理自動增量通過使用Identity聲明:對於第一次,你將不得不從數據庫中獲取的max Id,使用這個ID,你可以做這樣的事情產生的字母數字鍵在Id列。

在您的應用程序中,您可以通過限定符連接增加的Id編號以實現您所需的功能。

public class Student 
{ 
    public string Key { get { return KeyQualifier + Id.ToString().PadLeft(4, '0'); } } 
    public string KeyQualifier { get; set; } = "ST"; 
    public int Id { get; set; } //The Identity in the database 
    public string First_Name { get; set; } 
} 

Key屬性將返回所需的字母數字。

3

假設你正在使用SQL服務器作爲數據庫引擎(是不是從你的問題清楚),那麼唯一可行的解​​決方案是使用

  • 一個StudentIDRaw INT IDENTITY(1,1)列讓SQL Server處理您的數字值的自動增量
  • 一個計算,堅持StudentID該數值轉換爲價值,你需要

那麼試試這個:

CREATE TABLE dbo.Student 
(
    StudentIDRaw INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
    StudentID AS 'ST' + RIGHT('0000' + CAST(StudentIDRaw AS VARCHAR(4)), 4) PERSISTED, 
    .... your other columns here.... 
) 

現在,每次行插入Student表,而對於StudentIDRawStudentID指定值:

INSERT INTO dbo.Student(Col1, Col2, ..., ColN) 
VALUES (Val1, Val2, ....., ValN) 

那麼SQL Server將自動,安全地增加StudentIDRaw值和StudentID將包含值如ST0001,ST0002 ......等等 - 自動,安全,可靠,無重複。而它這樣做數據庫 - 所以無論你是否正在尋找與自己的應用程序,或者與管理工作室你的數據 - 你看到是字母數字StudentID就好