2017-08-18 2 views
0

Hier in einer ziemlich lächerlichen Situation gelandet.EF-Code zuerst Referenzschlüssel als Primärschlüssel

Ich bin in EF-Kern, ASP.NET-Kern, Visual Studio 2017 Community codieren.

Ich habe ein Modell, das keinen Primärschlüssel wie hat:

public class LoginRecord 
{ 
    public User User { get; set; } 

    public int UserId { get; set; } 

    public DateTime LastLogin { get; set; } 
    public int LoginCount { get; set; } 
} 

wo User eine Tabelle mit allen Feldern wie Name, E-Mail usw.

Wenn ich add-migration tun, wird ein Fehler erscheint:

Der Entitätstyp 'LoginRecord' erfordert einen Primärschlüssel definiert werden.

Dann habe ich versucht, indem Sie die [Key] Anmerkung zum UserId Feld wie folgt aus:

public class LoginRecord 
{ 
    public User User { get; set; } 

    [Key]  
    public int UserId { get; set; } 

    public DateTime LastLogin { get; set; } 
    public int LoginCount { get; set; } 
} 

aber jetzt schafft EF eine neue Spalte namens UserId1 die den Fremdschlüssel wird.

Ich brauche die UserId als nur einen Referenzschlüssel und benötigen keinen Primärschlüssel für diese Tabelle.

Ist es möglich? Wenn ja, bitte helfen!

+4

EF muss einen Primärschlüssel für jede Tabelle ** ** - und Sie dies tun ... –

+0

Sie können versuchen, zu verwenden, zusammengesetzter Primärschlüssel Sagen Sie UserId + LastLogin + Count, aber ich bin mir nicht sicher, ob es funktioniert) – SergeyAn

+0

einfach LoginRecordId als Primärschlüssel hinzufügen – Alexan

Antwort

-1

Versuchen:

[ForeignKey("UserId"), Column(Order = 0)] 
public int UserId { get; set; } 
+0

Warum erklären? –

+0

Ich hoffe, dass dies nur in meiner Spalte als der erste setzt ... aber nicht ein PKey ... –

+0

Nun, das 'Column' Attribut ist nicht relevant, wenn der Schlüssel nicht zusammengesetzt ist. Wie in den Kommentaren gesagt, ist der eigentliche Punkt hier, dass 'LoginRecord' ein eigenes PK benötigt. –

0

Sie sollten einen Primärschlüssel hinzufügen. Ich habe gelernt, dass jede Tabelle ein Feld erhalten soll, das wie die Tabelle + ID benannt ist. Sie könnten es auch ID nennen, wenn Sie es mehr mögen. :) So dass jeder Datensatz einzigartig wird.

So würde ich raten Ihnen Ihr Modell so etwas zu ändern:

public class LoginRecord 
{ 
    [Key] 
    public int LoginRecordID {get; set;} 

    public User User { get; set; } 

    public int UserId { get; set; } 

    public DateTime LastLogin { get; set; } 
    public int LoginCount { get; set; } 
} 
Verwandte Themen