添加联系人时实体框架总是返回Id 1

本文关键字:返回 Id 框架 联系人 实体 添加 | 更新日期: 2023-09-27 18:22:11

我创建了一个测试,当我保存一个对象时,它有点工作,问题是无论我插入多少次,对象的创建总是返回Id=1,所以当我设置与Id相同的变量时,它会获取表中的第一个变量,而不是刚刚插入的变量,下面是代码:

using (DbContextTransaction tx = this.Context.Database.BeginTransaction())
{
    CustomPerson con = new CustomPerson();
    con.Name = "John";
    con.LastName = "Smith";
    this.Context.CustomPersons.Add(con);
    //here tempId it's always 1 (why), but it inserts the record with a different id
    long tempId= this.Context.SaveChanges();
    CustomPerson newPerson = (CustomPerson)this.Context.CustomPersons.Find(tempId);
    Assert.AreEqual(newPerson.Name, con.Name);
    tx.Commit();
}

这样,它将在表中的位置1检索记录,而不是在表中新创建的值总是大于1的记录。

添加联系人时实体框架总是返回Id 1

DbContext.SaveChanges的MSDN文档中说:

返回值

类型:System.Int32

写入基础数据库的对象数。

这不是记录的ID。这是记录的数量。这应该是显而易见的,因为如果你在保存之前添加了多个实体会怎么样?你怎么能得到他们所有人的身份证?您总是保存一条记录,以便返回值1。

如果你想要实体的ID,那么你必须在保存后从相应的属性中获取值。

保存新客户后,CustomPersonId属性将由EF设置,Context.SaveChanges返回插入的记录数。