Benötigt Identity Owin LazyLoading?

8

tl; dr: Identität scheint zu erfordern, dass LazyLoading NICHT deaktiviert wird; ist das wahr und was ist die sauberste Problemumgehung?

Ich habe einige grundlegende AB-Tests an einer einfachen C # ASP.NET 4.5.1 MVC-5-Webanwendung mit EntityFramework 6.0.2, Identity EntityFramework 1.0.0 und Identity Owin 1.0.0 durchgeführt, und es scheint, dass Owin dies erfordert Laden ist nicht im ApplicationContext-Konstruktor deaktiviert.

Um das Problem zu replizieren, erstellen Sie einfach eine MVC-Anwendung mit Visual Studio 2013, verwenden Sie die MVC-Vorlage, lassen Sie alles auf den Standardwerten stehen, außer dass Sie die Zeile auskommentieren: "app.UseGoogleAuthentication ();" in App_Start / Startup.Auth.cs. Führen Sie die App aus und verwenden Sie Google, um sich anzumelden, vervollständigen Sie die verkürzte Registrierungsseite, zu der Sie gelangen, und gehen Sie zu account / manage. Sie sollten unten auf Google 2 Schaltflächen für Google sehen. Stoppen Sie die App.

Gehen Sie jetzt zu ApplicationContext.cs und ändern Sie den Konstruktor wie in diesem Code-Snippet gezeigt:

%Vor%

Wiederholen Sie den Test. Nur 1 Google-Schaltfläche sollte sichtbar sein. Mit LazyLoadingEnabled = false werden die Benutzerrollen, Logins (auch poss Claims) nicht geladen.

Meine Theorie ist, dass dies ein Microsoft-Überblick / "Zukunftsfeature" ist, da Identity EntityFramework und Identity Owin beide Version 1.0.0 sind.

Meine Frage ist, kann dieser Test bestätigt werden und was ist die sauberste Arbeit?

Für meine Zwecke werde ich einfach .ToList () und andere Methoden verwenden, um EagerLoading zu erzwingen, wenn ich es benutzen will. Ich brauche LazyLoading nicht wirklich deaktiviert, es ist nur eine sicherere Art zu schreiben, wenn Sie immer eifrig laden wollen. d. h., Sie verpassen einen Punkt, es wird zur Produktion, und Sie haben einen schönen Fehler, bei dem Sie in einigen Views durch Model und für Model.x.y y == null iterieren und die Datenbankverbindung wurde entfernt.

Lassen Sie uns nicht auf die Identität im Vergleich zu anderen (robusteren) Methoden eingehen, oder:

%Vor%

oder rufe dispose für jede Methode auf oder lasse die Verbindung automatisch abschalten. In diesem Szenario müssen Sie Identity Owin verwenden und alle Datenbankaufrufe so schnell wie möglich abstellen. Es sollte etwas geben, das ich vermisse, oder vielleicht ist Identität gerade jetzt so unvollständig.

    
David O'Brien 01.01.2014, 12:52
quelle

1 Antwort

11

Ja, das war ein Fehler, den wir in der Version 2.0.0-alpha1 behoben haben. Wenn zuvor lazyLoading explizit deaktiviert wurde, lädt EF die zugeordneten Benutzerentitäten nicht automatisch (logins / claims / roles)

    
Hao Kung 02.01.2014, 18:37
quelle