2011-12-08 13 views
35

¿Existe una manera directa de recuperar una clave primaria generada automáticamente de base de datos cuando se agrega un registro a través de Entity Framework 4.1?Obtener clave de identidad automática después de insertar a través de EF

Por ejemplo:

dbcontext.Entity_Tables.Add(new Entity_Table { item1 = val1, item2 = val2 }); 
dbcontext.SaveChanges(); 
newPK = ???; 

El equivalente SQL sería:

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

Por cierto estoy usando MySQL, pero el SQL sería el mismo que en MSSQL

+5

Solo quiero señalar que 'SELECT @@ Identity' NO es una buena forma de obtener la última identificación insertada. Deberías usar 'SCOPE_IDENTITY()' – Icarus

+0

Gracias Icarus. Nunca me di cuenta de eso. ¡Creo que también debería actualizar algunas de mis aplicaciones más antiguas! – chrisg229

+0

Posible duplicado de [¿Cómo puedo obtener Id de la entidad insertada en Entity framework?] (Http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity -framework) –

Respuesta

73

Creo EF debe actualizar su objeto entidad con la identidad:

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

Acabo de confirmar que es exactamente lo que hace. Muchas gracias ob! – chrisg229

+2

Cuando inserto, hay un disparador InsertBefore en la tabla que agrega sus propias propiedades, y así, incluso si se está ejecutando guardar cambios, esa inserción es reemplazada por la inserción antes, y entonces, la ID devuelta para mí es 0, y el valor real de ID es otra cosa. En ese caso, ¿cómo obtengo el valor? – Mahesh

Cuestiones relacionadas