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

时间:2014-09-17 04:09:03

标签: c# entity-framework dbcontext

我创建了一个测试,它在保存对象时有用,问题是无论我做了多少次插入,对象的创建总是返回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的值。

2 个答案:

答案 0 :(得分:3)

DbContext.SaveChanges的MSDN文档说:

  

返回值

     

输入:System.Int32

     

写入底层数据库的对象数。

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

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

答案 1 :(得分:2)

保存新客户后,Id的{​​{1}}属性将设置为CustomPersonEF会返回插入记录的数量。