我在ASP.NET实体框架有一个问题。我想获得Id值每当我添加一个对象到数据库。我该怎么做呢?

根据实体框架,解决方案是:

using (var context = new EntityContext())
{
    var customer = new Customer()
    {
        Name = "John"
    };

    context.Customers.Add(customer);
    context.SaveChanges();
        
    int id = customer.CustomerID;
}

这不会得到数据库表的标识,但得到实体的指定ID,如果我们从表中删除一条记录,种子标识将与实体ID不匹配。


当前回答

您保存的对象在将更改传播到数据库后应该具有正确的Id。

其他回答

Repository.addorupdate(entity, entity.id);
Repository.savechanges();
Var id = entity.id;

这是可行的。

您保存的对象在将更改传播到数据库后应该具有正确的Id。

这很简单。如果您使用DB生成的id(如MS SQL中的IDENTITY),您只需要将实体添加到ObjectSet和相关ObjectContext上的SaveChanges。Id将自动为您填写:

using (var context = new MyContext())
{
  context.MyEntities.Add(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Yes it's here
}

当使用自动生成的id时,实体框架默认在每个INSERT后面使用SELECT SCOPE_IDENTITY()。

所有的答案都非常适合自己的场景,我所做的不同之处在于,我直接从对象(TEntity)分配了int PK, Add()返回到这样的int变量;

using (Entities entities = new Entities())
{
      int employeeId = entities.Employee.Add(new Employee
                        {
                            EmployeeName = employeeComplexModel.EmployeeName,
                            EmployeeCreatedDate = DateTime.Now,
                            EmployeeUpdatedDate = DateTime.Now,
                            EmployeeStatus = true
                        }).EmployeeId;

      //...use id for other work
}

所以不是创建一个全新的对象,你只需要你想要的:)

编辑@GertArnold先生:

您只能在保存后获取ID,相反,您可以在保存前创建一个新的Guid并分配。