Frage

Es wurden viele Fragen an die Verwaltung EntityContext Lebensdauer

z.B. Instanziieren Sie einen Kontext, in LINQ to Entities

Ich bin zu dem Schluss gekommen, dass die Entität Kontext betrachtet werden sollte, eine unit-of-work und daher nicht wiederverwendet werden.Toll.

Aber während Sie einige der Forschung für die Beschleunigung meiner Datenbank zugreifen, rannte ich in diesem blog-post...

Verbesserung Der Entity Framework Performance

Die post argumentiert, dass EFs schlechte Leistung im Vergleich zu anderen frameworks ist oft aufgrund der EntityConnection Objekt wird jedes mal erstellt, wenn eine neue EntityContext Objekt erforderlich ist.

Um dies zu testen habe ich manuell erstellt eine statische EntityConnection in Global.asax.cs Application_Start().

Ich dann in all meinen Kontext Verwendung Anweisungen

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

Dies scheint beschleunigt die Dinge ein wenig ohne Fehler so weit wie weit wie ich sagen kann.

Aber ist das auch sicher?

Unterstützt die Verwendung eines anwendungsweite statische EntityConnection vorstellen race conditions?

Beste Grüße, Kervin

War es hilfreich?

Lösung

EntityConnection ist nicht dokumentiert werden Thread-sicher . Ich denke, dass man sie bündeln könnte, aber man kann nicht eine einzelne, statische Verbindung für eine Web-Anwendung verwenden, da es viele Threads beteiligt sein.

Andere Tipps

  • Wenn Sie Ihre EF-Kontext ist in der gesamten Anwendung, der Ansicht, dass Benutzer A hat änderungen (nicht verpflichtet) & user B hat sich verpflichtet, seine Veränderungen, werden alle änderungen erhalten Sie an die Datenbank übergeben, da Benutzer A & B verwenden Sie die gleiche Instanz

  • In meinem Projekt habe ich per WebRequest Herzen lag der EF-Kontext - ie.ein context-Objekt statisch ist, von Anfang bis Ende von einer web-Anfrage & alle Operationen, die Anfrage mit den gleichen EF-Kontext.Dies hat wesentlich beschleunigt mein Verarbeitung, ohne das oben erwähnte problem.

Eine Möglichkeit dies umzusetzen, ist die Verwendung eines DI-Containers (ich verwende Unity) zum verwalten der Lebensdauer der EF-Kontext.Die per web-request-lifetime-manager nicht gegeben ist, aus der box in der Einheit, aber es gibt Tonnen von Artikeln gibt, die zeigen, wie dies getan werden kann.

HTH.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top