添加联系人时实体框架总是返回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的记录。
DbContext.SaveChanges
的MSDN文档中说:
返回值
类型:System.Int32
写入基础数据库的对象数。
这不是记录的ID。这是记录的数量。这应该是显而易见的,因为如果你在保存之前添加了多个实体会怎么样?你怎么能得到他们所有人的身份证?您总是保存一条记录,以便返回值1。
如果你想要实体的ID,那么你必须在保存后从相应的属性中获取值。
保存新客户后,CustomPerson
的Id
属性将由EF
设置,Context.SaveChanges
返回插入的记录数。