我创建了一个测试,它在保存对象时有用,问题是无论我做了多少次插入,对象的创建总是返回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的值。
答案 0 :(得分:3)
DbContext.SaveChanges
的MSDN文档说:
返回值
输入:System.Int32
写入底层数据库的对象数。
它不是记录的ID。这是记录的数量。这应该是显而易见的,因为如果你在保存之前添加了多个实体怎么办?你怎么能得到所有这些的身份证?您始终保存一条记录,以便返回值1。
如果您想要实体的ID,则必须在保存后从相应的属性中获取值。
答案 1 :(得分:2)
保存新客户后,Id
的{{1}}属性将设置为CustomPerson
,EF
会返回插入记录的数量。