Sono quasi sicuro che vorrete usare il metodo ObjectContext.ExecuteStoreQuery se avete bisogno del valore dell'identità, piuttosto che dello ObjectContext.ExecuteStoreCommand.
Avrete bisogno di usare, come altri hanno detto SCOPE_IDENTITY()
, piuttosto che come @@IDENTITY
SCOPE_IDENTITY()
restituisce il valore di identità per l'ambito di esecuzione currente wheras @@IDENTITY
"è una funzione di sistema che restituisce il valore ultimo inserito identità".
Qualcosa del genere dovrebbe fare il trucco:
using(var context = GetAContextThatsReadyToUse())
{
var valueForColumn1 = 5;
var result = ExecuteStoreQuery<int>("INSERT INTO table1 (Column1) VALUES ({0});SELECT SCOPE_IDENTITY()", valueForColumn1);
foreach(var item in result)
{
// Should only return one result, which is the identity value inserted by ExecuteStoreQuery
Console.WriteLine(item);
}
}
Che cos'è un ambito? 2 thread sono ambiti diversi? –
sì, lo sono. controllare http://msdn.microsoft.com/en-us/library/ms190315.aspx per la documentazione dettagliata di SCOPE_IDENTITY – Numenor
in che modo SCOPE_IDENTITY() è diverso da @@ identity, SCOPE_IDENTITY() restituisce @@ identity ... e in la mia risposta, ho restituito l'identità @@ dopo l'inserimento ... – RameshVel