2017-08-18 2 views
0

J'ai atterri dans une situation assez ridicule ici.Code EF premier Clé de référence comme clé primaire

Je suis en train de coder dans le noyau EF, le noyau ASP.NET, la communauté Visual Studio 2017.

J'ai un modèle qui ne dispose pas d'une clé primaire comme:

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

    public int UserId { get; set; } 

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

User est une table avec tous les champs comme le nom, e-mail, etc.

Quand je fais add-migration, une erreur apparaît en disant:

Le type d'entité 'LoginRecord' nécessite la définition d'une clé primaire.

Alors j'ai essayé en ajoutant l'annotation [Key] au champ UserId comme ceci:

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

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

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

mais maintenant, EF crée une nouvelle colonne appelée UserId1 qui devient la clé étrangère.

J'ai besoin que le UserId soit juste une clé de référence et n'a pas besoin d'une clé primaire pour cette table.

Est-ce possible? Si oui, aidez s'il vous plaît!

+4

EF a besoin d'une clé primaire pour chaque table ** ** - et vous aussi ... –

+0

Vous pouvez essayer d'utiliser clé primaire composée. Dites UserId + LastLogin + Count, mais je ne suis pas sûr que cela fonctionne) – SergeyAn

+0

il suffit d'ajouter LoginRecordId comme clé primaire – Alexan

Répondre

-1

Essayez:

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

Vous voulez expliquer pourquoi? –

+0

J'espère que cela met juste dans ma colonne comme le premier ... mais pas un PKey ... –

+0

Eh bien, l'attribut 'Column' n'est pas pertinent lorsque la clé n'est pas composée. Comme cela a été dit dans les commentaires, le point réel ici est que 'LoginRecord' a besoin d'un PK propre. –

0

Vous devez ajouter une clé primaire. J'ai appris que chaque table devrait avoir un champ nommé comme table + id. Vous pouvez également le nommer id si vous l'aimez plus. :) Pour que chaque enregistrement devienne unique.

Je vous conseille de changer votre modèle à quelque chose comme ceci:

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; } 
}