0

我有一个Employee带有员工 ID 列的表EmpID (nvarchar(5))

这就是我将数据插入Employee表中 的方式

 Employee obj = new Employee();
 obj.EmpID = ?
 DBContext.Employees.InsertOnSubmit(obj);
 DBContext.SubmitChanges();

我想创造EmpID价值

00001  
00002  
00003  
00004  
....
....    

如何创建这样的自定义自动生成序列?

4

1 回答 1

3

我建议让 SQL Server 通过使用INT IDENTITY列来处理自动递增部分。不要在您的 C# 代码中执行此操作 - 这是一项数据库任务。

对于您希望以特定的格式化方式拥有的第二列,请使用基于该标识列的计算列。

尝试这样的事情:

CREATE TABLE dbo.Employee
(ID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
 EmpID AS RIGHT('0000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED, 

 .... your other columns here.......
)

这样,当您将行插入表中时,您将获得:

ID    EmpID
---------------
 1    00001
 2    00002
........
17    00017
18    00018
......
78    00078

ID列是您实际的主键和集群键,它体积小、速度快、永不更改 - 非常适合集群键。并且您的列EmpID总是自动生成的,ID并以您想要的格式化方式显示值。

更新:正如@ta.speot.is 正确评论的那样:如果您不需要EmpID数据库中的任何值,那么最好的方法是将ID INT IDENTITY列放在数据库中,并EmpID在您的 C# 中处理类中的代码Employee

public class Employee
{
   [Key]
   public int ID { get; set; }

   [NotMapped]
   public string EmpID 
   { 
      get { return "0000" + ID.ToString();  }  // do whatever you need to do here!
   }
}    
于 2013-09-21T07:10:36.580 回答