J'utilise la version finale (RTM, pas RC) de Visual Studio 2013 (téléchargée à partir de MSDN 2013-10-18) et donc la dernière version (RTM) d'AspNet.Identity. Lorsque je crée un nouveau projet Web, je sélectionne "Comptes d'utilisateurs individuels" pour l'authentification. Cela crée les tableaux suivants:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
Lorsque j'enregistre un nouvel utilisateur (en utilisant le modèle par défaut), ces tables (répertoriées ci-dessus) sont créées et la table AspNetUsers a un enregistrement inséré qui contient:
- Id
- Nom d'utilisateur
- PasswordHash
- SecurityStamp
- Discriminateur
De plus, en ajoutant des propriétés publiques à la classe "ApplicationUser", j'ai réussi à ajouter des champs supplémentaires à la table AspNetUsers, tels que "FirstName", "LastName", "PhoneNumber", etc.
Voici ma question. Existe-t-il un moyen de changer les noms des tables ci-dessus (lors de leur première création) ou seront-ils toujours nommés avec le AspNet
préfixe comme indiqué ci-dessus? Si les noms de table peuvent être nommés différemment, veuillez expliquer comment.
-- METTRE À JOUR --
J'ai implémenté la solution de @Hao Kung. Il crée une nouvelle table (par exemple, je l'ai appelée MyUsers), mais il crée également la table AspNetUsers. L'objectif est de remplacer la table "AspNetUsers" par la table "MyUsers". Voir le code ci-dessous et l'image de base de données des tables créées.
J'aimerais en fait remplacer chaque AspNet
table par mon propre nom ... Par exemple, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles et MyUsers.
Comment puis-je accomplir cela et me retrouver avec un seul ensemble de tables?
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string PhonePrimary { get; set; }
public string PhoneSecondary { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(): base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
}
}
- RÉPONSE DE MISE À JOUR -
Merci à Hao Kung et Peter Stulinski. Cela a résolu mon problème ...
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
}
la source
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
comme mentionné par @Sergey. Sinon, laMyUsers
table nouvellement nommée a une colonne discriminante comme l'a souligné @Daskul. De plus, laMyUserClaims
structure de votre table sera erronée comme l'a souligné @Matt Global. Je pense que l'idée d'ajouter cela est venue d'un commentaire à @Giang dans un blog msdn , mais c'est faux!Réponses:
Vous pouvez le faire facilement en modifiant le IdentityModel.cs comme ci-dessous:
Remplacez OnModelCreating dans votre DbContext puis ajoutez ce qui suit, cela changera la table AspNetUser en "Utilisateurs", vous pouvez également changer les noms de champ, la colonne Id par défaut deviendra User_Id.
ou simplement ci-dessous si vous souhaitez conserver tous les noms de colonnes standard:
Exemple complet ci-dessous (cela devrait être dans votre fichier IdentityModel.cs) J'ai changé ma classe ApplicationUser pour être appelée User.
Veuillez noter que je n'ai pas réussi à faire fonctionner cela si la table actuelle existe. Notez également que les colonnes que vous ne mappez pas seront créées par défaut.
J'espère que cela pourra aider.
la source
base.OnModelCreating
est la première ligne de code dans le remplacement sinon les autres lignes sont écrasées par la classe d'identité de base.Voici ma solution de travail:
Voir ceci pour plus de détails
la source
[text](link)
Vous pouvez essayer de remplacer cette méthode dans votre classe DbContext pour la mapper à une table de votre choix:
la source
base.OnModelCreating(modelBuilder);
ou le reste du modèle ne sera pas créé.Vous pouvez également créer des classes de configuration et spécifier chaque détail de chacune de vos classes d'identité, par exemple:
Et puis incluez ces configurations dans la méthode OnModelCreating ():
Cela vous donnera un contrôle complet sur tous les aspects des classes d'identité.
la source
Juste à des fins de documentation, pour celui qui vient à ce poste sur les années à venir, (comme moi XD), toutes les réponses données à mon commentaire sont exactes, mais vous pouvez simplement vous fier à cette méthode donnée par Alexandru Bucur sur son blog
la source
Nous pouvons changer les noms de table par défaut de asp.net Identity comme ceci:
De plus, nous pouvons étendre chaque classe et ajouter n'importe quelle propriété à des classes comme 'IdentityUser', 'IdentityRole', ...
Pour gagner du temps, nous pouvons utiliser le modèle de projet extensible AspNet Identity 2.0 pour étendre toutes les classes.
la source
Mais cela ne fonctionne pas dans .NET CORE (MVC 6) pour cela, nous devons changer la liaison en
comme
Cela pourrait aider quelqu'un :)
la source