Ich benutze Dotnet Core 1.1 unter Linux, und ich habe Probleme, wenn ich den identityContext von meinem normalen dbContext aufteilen möchte, wenn ich die folgende Zeile in meinem startup.cs - & gt; konfigurieren:
%Vor%Diese Zeile löst also die Ausnahme aus: Für den Entitätstyp 'IdentityUserLogin' muss ein Primärschlüssel definiert werden
Ich verstehe das einfach nicht, warum ist es meine Aufgabe, dem IdentityUserLogin einen Primärschlüssel zu geben, es ist eine Klasse von Drittanbietern, und ich habe es nicht einmal berührt. Ich habe das folgende einfache Setup:
%Vor%Und der ApplicationUser:
%Vor%In meinem Startup konfiguriere ich das Identitätsframework wie folgt:
configureServices:
%Vor%Und
Konfigurieren:
%Vor%Mein Projekt ist unter: my github repo
veröffentlichtwenn das hilft.
Ich habe viele Dinge ausprobiert. Die zwei vielversprechendsten waren, alle in dieser generischen Show verwendeten Klassen abzuleiten und sie explizit weiterzuleiten, zu versuchen, alle ihre Schlüssel in Ints usw. zu ändern. Und das gab genau den gleichen Fehler, nur mit int
anstelle von String. Die andere Möglichkeit, die ich versuchte, bestand darin, innerhalb von OnModelCreating
Folgendes zu tun, um IdentityUserLogin einen Primärschlüssel zu geben, z. B .:
Wie Sie sehen können, war dies zurück, als ich UserId als Integer hatte, aber ich bin mir nicht einmal sicher, ob die UserId ihr primaryKey sein sollte. Ich kann andere Fehler anstelle von diesem bekommen, das sagt
IdentityUserLogin ist Teil einer Hierarchie und hat keine Diskriminatorwerte
Aber wenn ich Diskriminator-Werte hatte, geht es letztendlich nur auf diesen Fehler zurück. Der seltsamste Teil ist meiner Meinung nach, dass ich genau die gleiche Implementierung wie das UnicornStore Github-Beispiel habe, das auch ein bisschen vom Identitätsframework verwendet. Also brauche ich eure Hilfe wirklich. Kann diesen Fehler reproduzieren, indem Sie das Projekt herunterladen, die default.appsettings.json
in appsettings.json
kopieren, eine gültige Verbindungszeichenfolge eingeben, dotnet restore
, mit dotnet run --environment Development
ausführen.
Ich habe sogar versucht, die Implementierung zu ändern, um eine MSSQL-Datenbank anstelle von MySQL zu verwenden, aber das ergab genau den gleichen Fehler.
Okay. Also werde ich versuchen, meine eigene Frage zu beantworten, weil ich es hinter mich gebracht habe. Es ist immer noch möglich, dem GitHub-Link im OP zu folgen und das Projekt zu sehen, in dem ich den Fehler gefunden habe.
Hauptsächlich, was falsch war, war, dass ich diesen Fehler bekommen habe, als ich ApplicationDbContext : IDentityContext
migrieren wollte, aber tatsächlich wurde der Fehler basierend auf meinem anderen dbContext in der Anwendung ausgelöst, als ich versuchte, die Migration auf diesem auszuführen. Ich bin mir immer noch nicht bewusst, warum der andere DbContext diese Identity-Entitäten, die ich nirgends erwähnt hatte, aufgriff. Ich finde es seltsam, dass ein dbcontext etwas über Entitäten zu wissen scheint, die in der OnModelCreating-Methode nicht erwähnt werden. Wie auch immer - als ich herausfand, dass es nicht der IdentityDbContext war, mit dem etwas nicht stimmte, fügte ich einfach Folgendes in das OnModelCreating des Kontexts ein, der den Fehler verursachte:
Also ... ich frage mich immer noch, warum mein Kontext diese Entitäten aufgreift, ohne etwas damit zu tun zu haben, und ich bin ziemlich besorgt, dass ich jedes Mal, wenn ich einen Kontext hinzufüge, Modelle ausschließen muss .
Schlüssel von Identitätstabellen werden in OnModelCreating
Methode von IdentityDbContext
zugeordnet und wenn diese Methode nicht aufgerufen wird, erhalten Sie den Fehler, den Sie erhalten haben.
Alles was Sie tun müssen, ist anzurufen.
%Vor%Die ursprüngliche Antwort (nur kopiert für die Referenz des anderen nur für den Fall) hier
Ich hatte ein ähnliches Problem in Bezug auf Ihr ursprüngliches Problem, wo
Der Entitätstyp 'IdentityUserLogin' benötigt einen Primärschlüssel für definiert sein.
Und während ich glaube, dass Ihre Lösung, Entitäten zu ignorieren, zu funktionieren scheint, wollte ich nur eine andere Lösung für diejenigen bereitstellen, die eigentlich jeder Entität einen Primärschlüssel zuweisen möchten. Das Problem ist, dass, wenn Sie eine Entität erstellen, die DbContext
den Primärschlüssel für jede verfolgen soll - also müssten Sie sie zuweisen.
Siehe mein Beispiel unten, wobei Project
und Target
meine Entitäten sind und ich ihnen jeweils eine Eigenschaft zugewiesen habe, die ich als Primärschlüssel für jede Entität verwenden möchte.
Nachdem Sie die Eigenschaft identifiziert und zugewiesen haben, die als Primärschlüssel für diese Entität bestimmt werden soll, wird der Fehler verschwinden.
Tags und Links c# entity-framework asp.net-core asp.net-identity