Entity Framework esegue qualcosa di simile alla risposta di gbn:
DECLARE @generated_keys table([Id] uniqueidentifier)
INSERT INTO Customers(FirstName)
OUTPUT inserted.CustomerID INTO @generated_keys
VALUES('bob');
SELECT t.[CustomerID]
FROM @generated_keys AS g
JOIN dbo.Customers AS t
ON g.Id = t.CustomerID
WHERE @@ROWCOUNT > 0
I risultati di output sono memorizzati in una variabile di tabella temporanea e quindi selezionati nuovamente nel client.Devono essere consapevoli del Gotcha:
inserti in grado di generare più di una riga, quindi la variabile può contenere più di una riga, in modo da poter essere restituito più di un ID
non ho idea del motivo per cui EF si unirebbe interiormente al tavolo effimero per tornare al tavolo reale (in quali circostanze i due non corrisponderebbero).
Ma questo è ciò che EF fa.
Solo SQL Server 2008 o versione successiva. Se è il 2005, allora sei sfortunato.
fonte
2016-11-03 21:36:35
Ho trovato un utile risposta qui: [PreparedStatement-con-chiavi generate dichiarazione-ritorno-] [1] [1]: http://stackoverflow.com/questions/4224228/preparedstatement- with-statement-return-generated-keys –
Possibile duplicato di [Il modo migliore per ottenere l'identità della riga inserita?] (http://stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted -row) –