2010-11-01 15 views
31

Estoy insertando datos en varias tablas. Necesito saber la última identificación insertada (autoincrementada) en la tabla. Necesito usarlo como una clave Foriegn en alguna otra tabla.¿Cómo encontrar una identidad de la última fila insertada en Entity Framework?

En resumen, necesito una alternativa de @@Identity en T-Sql.

+0

@Steven - esto debe ser publicado como respuesta. – Yakimych

+3

** Se recomienda ** usar 'SCOPE_IDENTITY()' en lugar de '@@ IDENTITY'. – Esteban

Respuesta

69

Entity Framework se cargará automáticamente el último ID insertado para rellenar la columna de clave principal de la entidad insertada:

var customer = new Customer() { Name = "Steven" }; 

context.AddObject(customer); 

context.SaveChanges(); 

var id = customer.Id; 

Tenga en cuenta que la Id propiedad sólo se rellena después de llamar SaveChanges() en caso de que el atributo StoreGeneratedPattern se establece en "Identidad" o "Calculado" para la columna de ID autoincrementado en la parte Almacenamiento del modelo.

+5

Esto es correcto solo en el caso de que el atributo StoreGeneratedPattern esté establecido en "Identidad" o "Computado" para la columna de ID de incremento automático en la parte de Almacenamiento del modelo. – Devart

2

De todos modos, si usted necesita el el id por algún otro propósito ... llamando EF Insertar Método de alguna entidad vuelve automáticamente el ID de fila insertada actualmente ...

var rowId=db.Insert(Entity); 

supongo ... PLZ dejar Quiero saber si estoy equivocado .... m JST un principiante en EF ..

0

puede ser que esto ayudará a:

var erp = new UserDataContext(); 

string euname = "Ded"; 

string eupassword = "Moro$ilka"; 

string eposition = "Moroz"; 

var status = erp.Database.ExecuteSqlCommand(@"EXEC InsertNewUser @neuname,@neupassword,@neuposition", 
new SqlParameter("@neuname",euname), 
new SqlParameter("@neupassword",eupassword), 
new SqlParameter("@neuposition",eposition) 
); 

erp.SaveChanges(); 

int lastid = erp.eusers.Count(); 
Cuestiones relacionadas