VS 2013 Controller Scaffolding schlägt für das ApplicationUser-Modell fehl (mehrere Objektsätze pro Typ werden nicht unterstützt)
In VS 2013 RTM, MVC 5 Projekt mit EF 6, habe ich versucht, das Gerüst eines Controllers basierend auf dem ApplicationUser (standardmäßig mit individuellen Konten, Authentifizierung). Beide ApplicationUser
und IdentityUser
zugeordnet sind, die eine Benutzer-Tabelle.
Der Assistent öffnet die Kontext-Datei für die Bearbeitung und versucht, fügen Sie eine neue db-set für ApplicationUser (ApplicationUsers) und schlägt dann fehl mit dieser Fehlermeldung:
Unable to retrieve metadata for ApplicationUser. Multiple object sets per type are not supported. The object sets ApplicationUsers and Users can both contain instances of type ApplicationUser
Die Lösung hat keine Referenz oder Instanz der ApplicationUsers
.
Ist das ein bekanntes Problem? Kann das Gerüst ausgeführt werden, mithilfe der Befehlszeile mit den Optionen (von PMC)?
Hinweis: Gerüst fügt auch eine extra db gesetzt, um den Kontext der Klasse, wenn ich geben Sie ein Modell, das Verweise ApplicationUser (die app funktioniert wenn ich Sie entfernen und beheben Referenzen in der generate-controller).
InformationsquelleAutor der Frage AKhooli | 2013-11-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wow. Ich bin wirklich überrascht, dass niemand hat sogar die Wurzel dieses, und stattdessen sind nur zu empfehlen workarounds.
IdentityDbContext
enthält bereits eine Immobilie:Wenn Sie eine Unterklasse
IdentityDbContext
erstellen Sie Ihre eigenen, anwendungsspezifischen Kontext, müssen Sie angeben, welche Klasse erfüllt dieTUser
Generika. Der Standardwert ist:Dann bedeutet das, dass Sie funktional, haben eine Eigenschaft, die bereits über Vererbung in form von:
Wenn Sie fügen Sie dann eine andere Eigenschaft, um Ihre Applikations-spezifischen Kontext, wie:
Haben Sie jetzt die gleiche Entität verfolgt von zwei
DbSet
s, und Sie bekommen den Fehler zu finden. Die Lösung ist? Einfach nicht, fügen Sie Ihre eigenenDbSet
fürApplicationUser
. Es gibt keine Notwendigkeit, umbenennen oder überschreiben nichts.InformationsquelleAutor der Antwort Chris Pratt
Kurz-Version: Benennen Sie Ihre ApplicationUser Klasse User.
Ich habe laufen in dieses problem für über einen Monat mit absolut kein Glück...bis jetzt!
Zunächst, ich dachte, es war ein Album Vorhören Problem, aber nachdem das verharren in der RTM-zusammen mit den aktuellen Bibliotheken, wurde ich unglaublich genervt, da dieses problem dauerhaft in Migrationen zu.
Jedoch IdentityDbContext, nach der Fehlermeldung zu sein scheint, die Schaffung von zwei DbSets: ApplicationUsers und Benutzer. Wir wollen nur, dass die Benutzer beim Blick auf den Quellcode:
Wir (und die Gerüste Motor, und die Migrationen der engine) sollte nur sehen, "Benutzer", nicht "ApplicationUsers".
Um diesen Missstand zu beheben, müssen Sie Ihre Bewerbung-Klasse-Konto für diese eher seltsamen Fehler. Benennen Sie einfach Ihre ApplicationUser Klasse zu Benutzer:
:
Versuch, das Gerüst wieder. Wenn Sie erhalten, ein weiterer Fehler entlang der Linien von der Klasse nicht gefunden werden kann, speichern Sie Ihr Projekt, in der Nähe VS2013, wieder öffnen und VS2013, laden Sie das Projekt neu erstellen Sie das Projekt, und schließlich versuchen, Gerüst. Die IdentityDBContext sollte nicht mehr erstellen Sie einen dummy "ApplicationUsers" DBSet-Objekt, wodurch die beiden Entity-Migrationen und Gerüste zur Ausstellung dieser Fehler.
Hoffe, das hilft!
P. S. Jedes mapping gemacht, sollte nicht von diesem problem betroffen, so sollten Sie in der Lage sein, um noch anzeigen zu den gleichen Tabelle, wenn Sie möchten.
BEARBEITEN:
Erhalten, wenn Sie weitere Probleme haben, rückgängig machen, das umbenennen. Ich lief in einige Probleme (mehr Gerüst-und Abfrage-Fehler), und nachdem ich ging zurück zu
ApplicationUser
diese Probleme verschwunden und das oben erwähnte problem nicht wieder auftreten. Nur ein heads-up.InformationsquelleAutor der Antwort James Haug
Lesen Sie die oben genannten Probleme en Lösungen.
Mein Fehler text war:
Ich vermute, der Fehler entstand, als ich war Herumspielen und eingerüstet Modell: ApplicationUser in einen neuen controller.
Gelöst durch entfernen der unten aus : ApplicationDbContext.cs
Keine Weiteren änderungen vorgenommen um das problem zu lösen. Ich hoffe, das jemand hilft.
InformationsquelleAutor der Antwort Patrick van der Meer
Wenn Sie Gerüst zu generieren, Kontrolle, vs auto insert 1 line zu den db-Kontext
Löschen Sie einfach diese Zeile, und in Ihrer Steuerung. ändern
db.ApplicationUsers
zudb.Users
InformationsquelleAutor der Antwort Grey Wolf
Ich verbrachte mehr als einen Tag die Lösung dieses Problem... :((( Umbenennung Klasse ist die einzige Lösung. Die richtige Lösung ist, entfernen Sie diese Zeile aus der Datei ApplicationContext (IdentityModels.cs). Ich weiß nicht, wenn es eingefügt wurde in meinen code.
System.Daten.Entität.DbSet ApplicationUsers { get; set; }
Benutzer verwaltet werden, die irgendwo im inneren, es sollte benutzerdefinierte TABELLEN HIER NUR. Es bedeutet, dass diese falsche Linie ist die zweite Erscheinung, und dies ist der Grund für "Multiple object sets" Fehlermeldung.
Nach dem löschen dieser Zeile und zu kompilieren, bekam ich mehrere Fehlermeldungen in meinem automatisch generierten code anzeigen, da es bereits verwiesen, die falsche Deklaration. Sie können erstellen Sie die Ansicht neu, oder korrigieren Sie den code manuell ein, einfach nur umbenennen, falsche Verweise auf ApplicationUser zu korrigieren Benutzer (korrekt definiert ist irgendwo im inneren, nicht in IdentityModels.cs)
Während versucht zu finden, die Lösung, die ich auch beschädigte meine Migrationen also ich hatte zu Beginn der migration der Datenstrukturen für die DB von Grund auf neu.
Nun bin ich völlig erholt aus dieser Frage und der fast-ROOT geht, ist klar. Leider das root-Problem ist wohl ein bug in VS2013, dass es schafft, die falschen zusätzliche Zeile.
Aber trotzdem, keep smiling. Angesichts solcher bugs ist nichts im Vergleich zur Programmierung in Java 🙂
InformationsquelleAutor der Antwort Milan Švec
Hier ist die einfachste Lösung. Wenn Sie hinzufügen/Gerüst einer Ansicht (Liste) basierend auf ApplicationUser als das Modell, VS2013 FÜGT die folgenden zu den IdentityModels.vb oder .cs-Datei.:
Öffentlichen Eigentum ApplicationUsers Als System.Daten.Entität.DbSet(Of ApplicationUser)
Einfach entfernen Sie diese Eigenschaft und das problem geht Weg.
InformationsquelleAutor der Antwort Matthew Pitts
Wenn Sie versuchen, erstellen Sie eine ApplicationUsersController Folgen Sie bitte diesen Schritten.
Löschen Sie diese Zeile aus IdentityModels.cs
Erstellen Sie das Projekt,
Generieren der controller
Gehen Sie zurück zu IdentityModels.cs und löschen Sie diese Zeile WIEDER
Erstellen Sie das Projekt,
Ändern Sie die Datenbank-Aufrufe aus ApplicationUsers Nutzer in ApplicationUsersController.cs
Drücken Sie die play-und cross Finger 🙂
InformationsquelleAutor der Antwort Matt
Was können Sie außerdem tun:
Erstellen Sie eine leere controller, und fügen Sie den code für den DataContext sich
Dann erstellen Sie Ihre Methoden wie Index, Erstellen und so weiter, und erstellen Sie die Ansichten mit der rechten Maustaste klicken und "Hinzufügen..." für jeden.
Gerüst Ihre Ansichten mit der Liste erstellen, was auch immer Vorlage, die geeignet ist, und wählen Sie die ApplicationUser als Modell.
Wichtig: Löschen Sie den Eintrag in "Daten-Kontext-Klasse", oder Sie erhalten eine ähnliche Fehlermeldung wieder. Aber wenn man die "Daten-Kontext-Klasse" leer, das Gerüst, das die Ansicht klappt gut.
InformationsquelleAutor der Antwort Malyngo
Ich das problem durch das entfernen DbSet aus dem Kontext und dann die Veränderung der Referenzen in der Steuerung von ApplicationUsers für die Nutzer. Es funktionierte - aber jetzt sehe ich keinen Sinn, Gerüst-Nutzer.
Zu viele Dinge hat, um durch die Aufrechterhaltung des auf top-Niveau und es funktioniert einfach nicht richtig. Jetzt weiß ich, dass Modelle und repository sind der Weg, den ich gehen möchte.
InformationsquelleAutor der Antwort DawidRybarczyk