Ich habe ein Datenbank-erstes EDMX-Modell in einer separaten Bibliothek (zB Common.Feedback.Data
), das die Tabelle AspNetUser
und die zugehörigen Identity Framework-Tabellen enthält (aus einer anderen bestehenden, funktionierenden Datenbank / Anwendung).
Ich habe die Verbindungszeichenfolge ApplicationDbContext
aktualisiert, um auf das neue Modell und die neue Datenbankverbindung zu zeigen:
Die Verbindungszeichenfolge in der Datei web.config enthält den vollständigen Pfad zur Assembly, und dieser Verweis ist in Ordnung:
%Vor%Zur Laufzeit führt jeder Zugriff auf die Anmeldung zu folgendem Fehler:
"Der Entitätstyp ApplicationUser ist nicht Teil des Modells für den aktuellen Kontext"
Alle Links, die ich versucht habe und die sich auf diesen Fehler beziehen, beinhalten normalerweise Möglichkeiten, die Migration zu aktualisieren.
Ich kann Migrationen nicht aktivieren, da es sich um eine Erstinstallation von EDMX handelt, aber ich nehme an, dass zwischen dem Objekt ApplicationUser
und der Tabelle aspnetusers
"irgendwo" hinter den Kulissen eine Verbindung besteht.
Hat jemand hier ein klares Verständnis davon, wie die Klasse ApplicationUser
zur Laufzeit der Tabelle aspnetusers
zugeordnet ist und wie man meinen Code für die Arbeit mit der Datenbank verwendet?
Repro-Schritte
Common.Feedback.Data
) res://*/
) IdentityModel.cs
, damit er mit dem Namen der Verbindungszeichenfolge in der Konfigurationsdatei übereinstimmt. app.config
der Bibliothek in das web.config
des Webprojekts.
Aktualisierung:
Basierend auf einem streunenden Post habe ich meine Verbindungszeichenfolge so geändert, dass sie der normalen SQL-Verbindung entspricht, die das Identity Framework standardmäßig verwendet (und einen SQL-Client verwendet):
%Vor%und zu Setup geändert, um diese neue Verbindung zu verwenden:
%Vor%Seltsamerweise ändert sich der Fehler zu:
Die magische Zahl im GZip-Header ist nicht korrekt. Stellen Sie sicher, dass Sie einen GZip-Stream übergeben.
Ich denke, dass die anfängliche Änderung eines SqlClient-Anbieters korrekt ist. Dieser neue Fehler könnte daher mit der Verwendung einer Azure-Datenbank über diese Verbindung zusammenhängen. Ich bin offen für Vorschläge, was ich als nächstes versuchen soll.
Aktualisiert web.config auf Vorschlag von @rism und Dieser Link (aber der GZip-Fehler bleibt bestehen):
%Vor%Auch auf der Grundlage von Tipps von @rism habe ich diese Version auch versucht (aber der GZip-Fehler bleibt bestehen):
%Vor%Neues Update:
Ich habe eine brandneue Webanwendung mit der Option Benutzersicherheit erstellt. Ich habe auch eine leere Datenbank in Azure erstellt.
Ich habe nur die Standardverbindungszeichenfolge geändert:
%Vor%und die Standard-Verbindungsfactory zu diesem:
%Vor%Beim Versuch, mich einzuloggen, erhalte ich den folgenden Fehler:
Die magische Zahl im GZip-Header ist nicht korrekt. Stellen Sie sicher, dass Sie es sind in einem GZip-Stream übergeben. Beschreibung: Eine nicht behandelte Ausnahme aufgetreten während der Ausführung der aktuellen Web-Anfrage. Bitte Überprüfen Sie den Stack-Trace, um weitere Informationen zum Fehler und zum Speicherort zu erhalten es stammt aus dem Code.
Ausnahmedetails: System.IO.InvalidDataException: Die magische Zahl in GZip Header ist nicht korrekt. Stellen Sie sicher, dass Sie einen GZip übergeben streamen.
Quellfehler:
Zeile 153: {Zeile 154: var user = new ApplicationUser {Benutzername = Modell.Email, Email = Modell.Email}; Linie 155: var result = erwarten UserManager.CreateAsync (Benutzer, model.Password); Zeile 156: if (result.Succeeded) Linie 157: {
In der ursprünglichen Frage ging es darum, wie OWIN
die Klasse ApplicationUser
auf die Tabelle AspNetUsers
abbildet.
Ich habe die Identity Framework-DLLs mit DotPeek dekompiliert und festgestellt, dass der Tabellenname "AspNetUsers" einfach in den Code der OnModelCreating
-Methode verdrahtet ist. z.B.
Dieser Code verwendet Reflektion zum Generieren einer Liste von Feldnamen aus den Eigenschaften in ApplicationUser. Es prüft mit einer einfachen SQL-Abfrage (der Systemtabelle, die alle Feldnamen enthält) auf das Vorhandensein all dieser Feldnamen und bestätigt, dass sie alle vorhanden sind.
Der Rest ist eine einfache Zuordnung von Namen / Werten mit Hilfe konstruierter SQL-Abfragen.
Was den anderen Teil des Problems anbelangt, die Datenbankverbindung, habe ich eine neue Frage erstellt, da sie a) nicht mit dem Titel dieses Buches zusammenhängt und b) mich verrückt macht! Das neue Frage ist Warum bekomme ich" Die magische Nummer in GZip Header ist nicht korrekt. " Fehler bei Verwendung von OWIN auth gegen Azure SQL
Tags und Links asp.net-mvc c# ef-database-first asp.net-identity entity-framework-6