IMO questo non è assolutamente qualcosa che si vuole fare.
Il blocco non è in realtà il problema principale che si verificherà qui. EF si bloccherà solo per la durata di una chiamata di salvataggio delle modifiche (in realtà è uno dei grandi vantaggi dell'utilizzo di un grafico di tracciamento sulle transazioni parzialmente impegnate utilizzate dalla maggior parte degli ORM).
Che cosa sta per causare greif è il grafico di tracciamento stesso. Il modo in cui EF funziona (nella maggior parte dei casi) è che mantiene una copia di ogni entità mai vista e scorre attraverso di essi per trovare che cosa è cambiato ed eseguire un processo chiamato fixup che rende le proprietà di navigazione funzionanti con backlink. Questo processo scorre attraverso tutte le entità che il contesto ha mai visto e viene chiamato su una serie di operazioni (aggiungere, allegare, eliminare, salvare, interrogare e pochi altri). Ciò significa che se il grafico di tracciamento è grande, questo processo può richiedere un po 'di tempo. Se mantieni il tuo contesto in vita per sempre, le dimensioni del grafico di tracciamento tendono verso la dimensione del tuo database, rendendolo poco maneggevole e lento.
fonte
2013-01-25 16:49:58
Grazie per la conferma. Sono d'accordo. –
@davea In un po 'di sidenote utilizzo l'injection dependency per gestire il ciclo di vita del contesto, con una nuova istanza per richiesta (in uno scenario Web) o una nuova istanza ogni volta. –
Luke, ho letto di DI come schema e ne capisco il valore. Usare un framework come Ninject mi può aiutare qui? –