Der Entitätstyp 'IdentityUserLoginstring' erfordert die Definition eines Primärschlüssels

7

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öffentlicht

wenn 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 .:

%Vor%

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.

    
DenLilleMand 20.11.2016, 11:42
quelle

3 Antworten

4

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:

%Vor%

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 .

    
DenLilleMand 27.11.2016, 00:34
quelle
17

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

    
immirza 20.08.2017 17:35
quelle
1

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.

%Vor%

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.

    
susieloo_ 14.08.2017 17:25
quelle