2009-05-08 15 views
5

Io uso linq 2 sql per il mio ORM.Come posso sapere se un determinato oggetto Linq-to-Sql è collegato a un datacontext?

Per motivi di prestazioni, serializzo alcuni di essi e li metto in memcached.

Quando sono deserializzati, non sono ovviamente collegati a un datacontext, che è al 100%, in quanto vengono utilizzati solo per la lettura in quegli scenari.

Per motivi di sanità, tuttavia, mi piacerebbe essere in grado di stabilire se un determinato oggetto è collegato a un datacontext (recuperato dal db) o meno (recuperato da memcached).

Qualche idea?

Grazie.

risposta

9

Utilizzare GetOriginalEntityState. Ecco un test.

 
Customer cust = new Customer(); 
ctx.Customers.Attach(cust); 

Customer orig = ctx.Customers.GetOriginalEntityState(cust); 

//test if orig is null 
+1

Grazie David, sembra funzionare. Tuttavia, quando si tenta di collegare un'entità che proviene dal contesto, genera un'eccezione, che potrebbe diventare costosa se questo controllo è stato eseguito frequentemente come guardia: \ – Thenon

+0

Semplicemente usando il metodo 'GetOriginalEntityState' e un controllo Null senza che la chiamata 'Attach' prima sembra funzionare ad es 'entityTable.InsertAllOnSubmit (entities.Where (e => entityTable.GetOriginalEntityState (e) == null))' inserisce correttamente tutte le nuove entità. – bstoney

Problemi correlati