Kontext des Entity Framework-Objekts im ASP.NET-Sitzungsobjekt?

Wir haben eine mehrschichtige Asp.NET Web Forms-Anwendung. Die Datenschicht hat eine Klasse namensDataAccess welche impementsIDisposable und hat eine Instanz unseres Entity Framework-Objektkontexts als privates Feld. Die Klasse verfügt über eine Reihe öffentlicher Methoden, die verschiedene Sammlungen von Entitäten zurückgeben, und gibt den Objektkontext frei, wenn er freigegeben wird.

Aufgrund einer Reihe von Problemen, mit denen wir konfrontiert waren, haben wir beschlossen, dass es ein großes Plus wäre, den Objektkontext (oder eine Instanz von) beizubehaltenDataAccess) im Umfang länger auf dem Server. Es wurde vorgeschlagen, eine Instanz in der zu behaltenHttpContext.Current.Items Sammlung vondieser Beitrag um eine Instanz pro HTTP-Anforderung zu haben.

Ich frage mich: Welche Probleme / Bedenken / Probleme würden beim Speichern einer Instanz unseres Objektkontexts in der auftreten?HttpContext.Current.Session Objekt????

Ich gehe davon aus, dass das Session-Objekt abgeschlossen und für die Garbage Collection festgelegt ist, wenn die Sitzung eines Benutzers abläuft, sodass die Instanz ordnungsgemäß entsorgt wird.Ich gehe davon aus, dass die meisten Standardbrowsereinstellungen es unserer App ermöglichen, ihren SessionId-Cookie ohne Bedenken zu platzieren.Die Datenmenge, mit der der Objektkontext zu tun hat, ist nicht sehr groß und stellt für unsere anständige Serverhardware kein Problem dar, was das zeitliche Zwischenspeichern und relativ wenige gleichzeitige Benutzer betrifft.

Dies lässt sich relativ schnell implementieren und hat keine Auswirkungen auf unsere zahlreichen vorhandenen Komponententests.

Wir werden AutoFac und eine ServiceProvider-Klasse verwenden, um Instanzen bereitzustellen. Wenn eine Instanz des ObjectContext erforderlich ist, wird dieser durch einen Code wie den folgenden zurückgegeben:

private static Entities GetEntities(IContext context)
{
    if (HttpContext.Current == null)
    {
        return new Entities();
    }

    if (HttpContext.Current.Session[entitiesKeyString] == null)
    {
        HttpContext.Current.Session[entitiesKeyString] = new Entities();
    }

    return (Entities)HttpContext.Current.Session[entitiesKeyString];
}

Prost.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage