C# 添加一个Varchar Value列,该列将包含特定字符以及自动递增ID

C# 添加一个Varchar Value列,该列将包含特定字符以及自动递增ID,c#,entity-framework,model-view-controller,model,code-first,C#,Entity Framework,Model View Controller,Model,Code First,我正在使用MVC5开发一个应用程序,并使用实体框架代码优先的开发方法。我在Employee.cs Model类中有一个ID列,该列在插入记录时自动递增。我想知道如何在我的表中添加另一个varchar类型的列,它看起来像这样EMP233其中233是由Identiy列生成的ID 注意: 我知道如何使用SQLServer完成这项任务,但我很想知道如何使用EF代码优先的方法完成这项任务 很多人会建议我从db中获取最新的max ID,增加它并将其添加到对象中,比如 int EmpMaxID = db.Em

我正在使用MVC5开发一个应用程序,并使用实体框架代码优先的开发方法。我在Employee.cs Model类中有一个ID列,该列在插入记录时自动递增。我想知道如何在我的表中添加另一个varchar类型的列,它看起来像这样EMP233其中233是由Identiy列生成的ID

注意:

我知道如何使用SQLServer完成这项任务,但我很想知道如何使用EF代码优先的方法完成这项任务

很多人会建议我从db中获取最新的max ID,增加它并将其添加到对象中,比如

int EmpMaxID = db.Employees.OrderByDescending(u => u.ID).FirstOrDefault();
employee.VarcharID = "EMP" + EmpMaxID;
这种方法不是最好的,因为假设用户添加了一条记录,系统将其ID生成为234,并在用户删除该记录后立即生成。然后,在这种情况下,下一次系统将返回Max ID为233,即EmpMaxID=233,但系统生成的ID将为235。因此,我们将得到一个ID=235、EmpID=“EMP233”的记录,这是错误的。我希望你明白我的意思

这是我试过的,但没用。在模型里我写了这样的东西

public int ID { get; set; } // Unique numeric ID for each Employee

public string strEmpID // A varchar ID
    {
        get { return strEmpID}
        set { strEmpID= "EMP" + ID; } // ID is Auto Generated
    }

这不管用。请帮我完成这项任务。感谢您在第一次保存此记录时

获取Id,并更新strEmpID属性

var emp = new Employee { Name="Scott" };
db.Employees.Add(emp);
db.SaveChanges();    

if (String.IsNullOrEmpty(emp.strEmpID))
{
    e.strEmpID = "EMP" + e.Id;
    db.Entry(e).State=EntityState.Modified;
    db.SaveChanges();
}

唯一安全的方法是添加记录,然后获取id并更新记录

using (var context = new MyContext())
{
  context.MyEntities.AddObject(newEmployee);
  context.SaveChanges();

  int id = newEmployee.Id; // Your Identity column ID
  newEmployee.streEmpId = "EMP" + id;
  context.Entry(newEmployee).State = EntityState.Modified;
  context.SaveChanges();

}

我知道如何使用SQL Server执行此任务,这正是执行此任务的地方。为什么要使用低级方法?@GertArnold你是对的,但关键是我希望我的应用程序完全独立于数据库,即当我在其他机器上运行应用程序时,我希望EF生成数据库及其所有表、关系(PK、FK)等。现在告诉我如何在MVC项目中创建此逻辑。我应该在override OnModelBuild方法中写些东西吗?以下是我将在SQL Server中运行的查询,其目的是创建表EmployeeMaster([ID]int-IDENTITY(1,1)主键,[EmployeeNo]AS('EMP'+RIGHT('0000000'+CAST(ID AS-VARCHAR(7)),7))持久化)。