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");
}
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
comme mentionné par @Sergey. Sinon, la MyUsers
table nouvellement nommée a une colonne discriminante comme l'a souligné @Daskul. De plus, la MyUserClaims
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!