IMO das ist definitiv nicht etwas, was Sie tun möchten.
Sperren ist nicht das eigentliche Problem, das Sie hier haben werden. EF wird nur für die Dauer eines Aufrufs zum Speichern von Änderungen gesperrt (dies ist einer der großen Vorteile der Verwendung eines Verfolgungsdiagramms für teilweise festgeschriebene Transaktionen, die von den meisten anderen ORMs verwendet werden).
Was Sie verursachen wird, ist das Tracking-Diagramm selbst. Wie EF funktioniert (in den meisten Fällen) ist es, dass es eine Kopie von jeder Entität behält, die es jemals gesehen hat, und durchläuft sie, um herauszufinden, was geändert wurde, und führt einen Prozess namens fixups aus, der Navigationseigenschaften mit Backlinks arbeiten lässt. Dieser Prozess durchläuft jede Entität, die der Kontext jemals gesehen hat, und wird bei einer Reihe von Operationen aufgerufen (Hinzufügen, Anfügen, Löschen, Speichern, Abfragen und einige andere). Dies bedeutet, wenn der Tracking-Graph groß ist, kann dieser Prozess ziemlich viel Zeit in Anspruch nehmen. Wenn Sie Ihren Kontext für immer am Leben erhalten, tendiert die Größe des Tracking-Diagramms zur Größe Ihrer Datenbank, was es unhandlich und langsam macht.
Danke für die Bestätigung. Ich stimme zu. –
@davea Ich benutze Dependency Injection, um den Kontextlebenszyklus zu verwalten, mit entweder einer neuen Instanz pro Anfrage (in einem webbasierten Szenario) oder einer neuen Instanz jedes Mal. –
Luke, ich habe über DI als Muster gelesen und verstehe etwas von seinem Wert. Würde mir ein Framework wie Ninject helfen? –