C'è un modo per determinare se un oggetto LINQ non è stato ancora inserito nel database (nuovo) o è stato modificato dall'ultimo aggiornamento (sporco)? Pianifico di legare la mia interfaccia utente a oggetti LINQ (usando WPF) e ho bisogno che si comporti diversamente a seconda che l'oggetto sia già nel database.LINQ to SQL - Tracciamento di oggetti nuovi/sporchi
MyDataContext context = new MyDataContext();
MyObject obj;
if (new Random().NextDouble() > .5)
obj = new MyObject();
else
obj = context.MyObjects.First();
// How can I distinguish these two cases?
L'unica soluzione semplice mi viene in mente è quello di impostare la chiave primaria di nuovi record a un valore negativo (i miei PKs sono un campo di identità e saranno quindi impostati su un numero intero positivo sulla INSERT
). Questo funzionerà solo per rilevare nuovi record. Richiede anche PK di identità e richiede il controllo del codice che crea il nuovo oggetto.
C'è un modo migliore per farlo? Sembra che LINQ debba monitorare internamente lo stato di questi oggetti in modo che possa sapere cosa fare su context.SubmitChanges()
. C'è un modo per accedere a quello "stato dell'oggetto"?
Chiarimento Apparentemente la mia domanda iniziale era confusa. Non sto cercando un modo per inserire o aggiornare i record. Sto cercando un modo, dato qualsiasi oggetto LINQ, per determinare se quell'oggetto non è stato inserito (nuovo) o è stato modificato dal suo ultimo aggiornamento (sporco).
Questo non è proprio quello che sto cercando. So come inserire/aggiornare usando LINQ. Quello di cui ho bisogno è determinare lo stato di ogni oggetto LINQ dato. –