通过EF插入数据后获取自增主键

47
有没有一种简单的方法在使用Entity Framework 4.1添加记录时检索自动生成的数据库主键?
例如:
dbcontext.Entity_Tables.Add(new Entity_Table { item1 = val1, item2 = val2 });
dbcontext.SaveChanges();
newPK = ???;

SQL 的等价语句为:

newPK = executeOnDB("INSERT INTO Entity_Table (item1, item2) VALUES (val1, val2);SELECT @@Indentity";);

顺便提一下,我正在使用MySQL,但是SQL与MSSQL上的相同。


6
我想指出,SELECT @@Identity 不是获取最后插入的 id 的好方法。你应该使用 SCOPE_IDENTITY() - Icarus
谢谢你,伊卡洛斯。我从来没有意识到这一点。看来我也应该更新一些旧的应用程序! - chrisg229
可能是如何在Entity Framework中获取插入实体的Id?的重复问题。 - Michael Freidgeim
1个回答

96

我认为EF应该使用标识符更新您的实体对象:

var entity = new Entity_Table { item1 = val1, item2 = val2 };
dbcontext.Entity_Tables.Add(entity);
dbcontext.SaveChanges();
int newPK = entity.ID;

4
我刚确认了它确实是这样。非常感谢,ob! - chrisg229
3
当我执行插入操作时,表上会触发InsertBefore事件并添加自己的属性。因此,即使执行保存更改操作,我的插入操作也会被InsertBefore事件替换,导致返回给我的ID值为0,而实际的ID值是其他值。在这种情况下,我该如何获取实际的ID值? - Mahesh
2
如何通过EF在插入之前获取自动标识键? - Revathi Vijay
猜测这是在保存更改之前,那么如何重新获取仅ID呢? int newPK = entity.ID; - Pratik 1020

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接