我在ASP.NET MVC中有以下代码。Alpha数字主键
我想我的程序可以保存自动递增的alpha数字主键。
前2个字母必须是'ST',接下来的4个字母必须是自动增量的数字。有什么办法可以通过数据注释来处理这个任务吗?
public class Student
{
public int Id { get; set; }
public string First_Name { get; set; }
}
我在ASP.NET MVC中有以下代码。Alpha数字主键
我想我的程序可以保存自动递增的alpha数字主键。
前2个字母必须是'ST',接下来的4个字母必须是自动增量的数字。有什么办法可以通过数据注释来处理这个任务吗?
public class Student
{
public int Id { get; set; }
public string First_Name { get; set; }
}
您必须在您的代码中为您在数据库中输入的每条记录生成自己的字母数字键。
public string getAlphaNumericKey()
{
int number = maxidfromDB();
if(number > 0)
{
return "ST"+ number.ToString("0000");
}
else
{
return "ST0001";
}
}
嗯,我试过了,它并不是最好的解决方案。它因为可以说如果我添加一个记录和数据库生成其ID为_12_和VarcharID为_ST0012_。 现在,如果我删除此记录(ID = 12),然后尝试添加另一条记录。 ** maxidfromdb()**函数将返回_11_。系统将生成下一个记录ID为_13_,其VarcharID将为** ST0012 **,这与生成VarcharID的Orignal目的冲突 –
你可以让数据库处理自动增量通过使用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
属性将返回所需的字母数字。
假设你正在使用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
表,而对于StudentIDRaw
或StudentID
指定值:
INSERT INTO dbo.Student(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)
那么SQL Server将自动,安全地增加StudentIDRaw
值和StudentID
将包含值如ST0001
,ST0002
......等等 - 自动,安全,可靠,无重复。而它这样做数据库 - 所以无论你是否正在寻找与自己的应用程序,或者与管理工作室你的数据 - 你看到是字母数字StudentID
就好
分裂你的字母数字键,然后就递增int部分并重新连接它 –