2011-12-08 15 views
35

Esiste un modo semplice per recuperare una chiave primaria generata automaticamente dal DB quando si aggiunge un record tramite Entity Framework 4.1?Ottieni la chiave di identità automatica dopo l'inserimento tramite EF

Ad esempio:

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

L'equivalente SQL sarebbe:

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

BTW sto usando MySQL, ma lo SQL sarebbe la stessa del MSSQL

+5

Voglio solo sottolineare che 'SELECT @@ Identity' NON è un buon modo per ottenere l'ultimo ID inserito. Dovresti usare 'SCOPE_IDENTITY()' – Icarus

+0

Grazie Icarus. Non l'ho mai capito. Suppongo che dovrei aggiornare anche alcune delle mie vecchie app! – chrisg229

+0

Possibile duplicato di [Come posso ottenere l'Id dell'entità inserita nel framework Entity?] (Http://stackoverflow.com/questions/5212751/how-can-i-get-id-of-inserted-entity-in-entity -framework) –

risposta

73

Credo EF dovrebbe aggiornare il tuo oggetto entità con l'identità:

+3

Ho appena confermato che è esattamente quello che fa. Molte grazie ob! – chrisg229

+2

Quando inserisco, c'è un trigger InsertBefore sulla tabella che aggiunge le sue proprietà, e quindi, anche se le modifiche di salvataggio sono in esecuzione, quell'inserto viene sostituito dall'inserto prima, e quindi, l'ID restituito per me è 0, e il valore effettivo dell'ID è un'altra cosa. In tal caso, come ottengo il valore? – Mahesh

Problemi correlati