Comment ajouter une référence de clé étrangère à ASP.Net MVC 5 de l'Identité?
J'ai un nouveau ASP.NET MVC 5.1 projet à l'aide de la ASP.Net l'Identité.
Il semble fiable et la promesse, mais aujourd'hui, je passe près de 9 heures à faire des choses simples, si à l'aide de SQL.
Mon problème est que je ne peut pas créer une table via le CodeFirst avec la référence de clé étrangère à la valeur par défaut AspNetUsers table.
Par exemple:
J'ai créer une table nommée - Adresse
public class Address
{
[Key]
public string UserId { get; set; }
public string MyAddress { get; set; }
}
Mais comment puis-je créer une clé étrangère référence à AspNetUsers?
J'ai essayer de remplacer la propriété ci-dessus par
public IdentityUser MyAddress { get; set; }
//Or
public virtual IdentityUser MyAddress { get; set; }
//Or
public virtual ApplicationUser MyAddress { get; set; }
Mais tous montrent encore une erreur:
One or more validation errors were detected during model generation:
MiaPos.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.
MiaPos.Models.IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. Define the key for this EntityType.
IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' is based on type 'IdentityUserLogin' that has no keys defined.
IdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' is based on type 'IdentityUserRole' that has no keys defined.
J'ai aussi essayer de remplacer la OnModelCreating de cette post
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
Mais quand je lance Ajoutez-la Migration, c'est de créer la IdentityUserLogin, IdentityRole, IdentityUserRole tables et en double, tout le préfixe est différent. (AspNet<->Identité)
Enfin je le faire en SQL en 10 secondes, mais je veux juste savoir pourquoi je ne peut pas le faire dans CodeFirst?
Et pourquoi donc difficile de faire de telles choses de Microsoft 2014 Nouvelle Technologie.
- Vous pouvez vérifier ceci: github.com/rustd/AspnetIdentitySample
- merci Gábor Plesz, je vais vérifier de ce ASAP.
- Salut Gábor Plesz, je viens de vérifier l'échantillon. J'ai trouvé la réponse. J'ai donc répondu à ma question.
- Vient de poster une réponse à une question similaire, si ça peut aider: stackoverflow.com/questions/20104289/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire comme ceci. parce que parfois vous pouvez avoir besoin 1-1 connexion
Vous remercie Gábor Plesz pour le commentaire ci-dessus.
J'ai trouvé la solution.
La ApplicationUser classe qui hérite IdentityUser (qui créent AspNetUsers table) devrait créer un ICollection des biens de l'enfant de la classe de l'enfant (tableau).
par exemple
De sorte que le ToDo classe peut être référence à ApplicationUser
Recommandons fortement d'avoir un coup d'oeil de l'échantillon que Gábor Plesz dit.
Si vous voulez vraiment créer une table nommée Adresse au lieu de créer une propriété nommée Adresse générée comme une colonne dans AspNetUsers table procédez de la manière suivante (obs: dans ce cas, je suppose qu'un utilisateur peut avoir plusieurs adresse):
À votre Adresse de classe:
Votre ApplicationUser Classe:
Au sein de votre DBContext dans OnModelCreating méthode procédez de la manière suivante ( API fluent ):
OBS: N'oubliez pas d'ajouter au-dessus de la OnModelCreating méthode cette ligne de code:
Après l'exécuter ces commandes dans votre Gestionnaire de paquets de la Console:
et après:
Mais, si vous voulez juste compris une nouvelle propriété pour le Réseau des Utilisateurs de créer à votre ApplicationUser.cs fichier/catégorie de la propriété:
et d'exécuter les mêmes commandes pour votre PMC:
après:
Espérons que cette aide!