Domanda

Ci sono stati molti domanda sulla gestione di EntityContext vita,

es. un'istanza di un contesto in LINQ to Entities

Sono venuto alla conclusione che il contesto entità dovrebbe essere considerato un lavoro di unità di e quindi non riutilizzato. Grande.

Ma mentre facendo qualche ricerca per accelerare il mio accesso al database, mi sono imbattuto in questo post del blog ...

Migliorare Entity Framework prestazioni

Il post sostiene che EF di scarso rendimento rispetto ad altri framework è spesso dovuto al EntityConnection oggetto che viene creato ogni volta che un nuovo EntityContext è necessario oggetto.

Per verificare questa ho creato manualmente un'EntityConnection statico in Global.asax.cs Application_Start ().

Ho poi convertito tutto il mio contesto con le dichiarazioni di

using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
   ....
}

Questo sembra aver accelerato le cose un po 'senza errori fino ad ora, per quanto posso dire.

Ma è sicuro?

Lo utilizzando una statica applicationwide EntityConnection introdurre condizioni di gara?

Con i migliori saluti, Kervin

È stato utile?

Soluzione

EntityConnection è documentato da non thread-safe . Credo che li si possa piscina, ma non è possibile utilizzare una singola connessione, statica per un'applicazione Web, come ci saranno molte discussioni coinvolte.

Altri suggerimenti

  • Se il contesto EF è l'applicazione a livello, si consideri che l'utente A ha apportato modifiche (non impegnati) e l'utente B ha commesso i suoi cambiamenti, le modifiche avranno commesso al database in quanto sia l'utente A & B utilizzano il stessa istanza

  • Nel mio progetto, ho fatto un intance per WebRequest del contesto EF - vale a dire. un oggetto di contesto è statico dall'inizio attraverso l'estremità di una richiesta web e tutte le operazioni della lavoro richiesta con lo stesso contesto EF. Questo ha notevolmente accelerato la mia elaborazione senza il problema di cui sopra.

Un modo per implementare questo è quello di utilizzare un contenitore DI (sto usando unità) per gestire il ciclo di vita del contesto EF. Il per Web Manager richiesta di vita non è dato fuori dalla scatola in Unity, ma ci sono tonnellate di articoli là fuori che mostrano come questo può essere fatto.

HTH.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top