我在ASP.NET MVC中有以下代码。
我希望我的程序可以保存自动递增的alpha numberic主键。
前2个字母必须是' ST'接下来的4个应该是必须是自动增量的数字。有什么方法可以通过数据注释来处理这个任务吗?
public class Student
{
public int Id { get; set; }
public string First_Name { get; set; }
}
答案 0 :(得分:3)
假设您使用 SQL Server 作为数据库引擎(从您的问题中未明确),那么唯一可行的解决方案是使用
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
等值。 ....等等 - 自动,安全,可靠,无重复。它在数据库中 - 所以无论您是使用自己的应用程序还是使用Mgmt Studio查看数据,您都看那个字母数字{{1很好
答案 1 :(得分:0)
您必须在您的代码中为您在数据库中输入的每条记录生成字母数字键。首先,您必须从数据库中获取max Id
,使用此ID可以通过执行以下操作生成字母数字键:
public string getAlphaNumericKey()
{
int number = maxidfromDB();
if(number > 0)
{
return "ST"+ number.ToString("0000");
}
else
{
return "ST0001";
}
}
答案 2 :(得分:0)
您可以使用Identity
列上的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
属性将返回您想要的字母数字。