2016-06-12 19 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就好