2012-09-05 7 views
5

C'è un modo per inviare una proprietà con defaultValue ma aggiornarla con il risultato calcolato del database? C'è un trigger nel database, che per l'input -1 innesca una procedura che calcola un nuovo valore. Come recuperare il valore?Come posso ottenere l'Id dell'entità inserita nel framework Entity quando si usa defaultValue?

<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="None" DefaultValue="-1" /> 

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
return x.ID //gives -1, but the computed value should be different. 
+0

Ho provato db.Refresh (System.Data.Objects.RefreshMode.StoreWins, x); ma senza fortuna, il metodo di aggiornamento cerca probabilmente il database usando l'ID, che è il valore che ho bisogno di aggiornare. –

risposta

-2
using (var context = new MyContext()) 
    { 
     context.MyEntities.AddObject(newObject); 
     context.SaveChanges(); 

     int id = newObject.Id; // Will give u the autoincremented ID 
    } 
+3

Non sta utilizzando l'incremento automatico ma un trigger per generare un valore. –

11

è necessario ricaricare l'entità dopo savechanges.Because è stato alterato da un trigger di database che non può essere rintracciato da EF. Quindi abbiamo bisogno di ricaricare nuovamente il soggetto dal DB,

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
db.Entry(x).GetDatabaseValues(); 

return x.ID; 
+0

Questo sembra buono, ma non c'è nessuna voce nel contesto db –

+0

Stai usando il modello per primo? –

+1

sì, sto usando prima il modello –

Problemi correlati