J'utilise la version release (RTM, pas RC) de Visual Studio 2013 (téléchargée sur 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 (listées ci-dessus) sont créées et la table AspNetUsers a un enregistrement inséré qui contient :
- Id
- Nom d'utilisateur
- PasswordHash
- Timbre de sécurité
- 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 modifier le nom des tables ci-dessus (lors de leur création initiale) ou seront-elles toujours nommées avec l'identifiant AspNet
préfixe comme je l'ai indiqué ci-dessus ? Si les noms des tables peuvent être nommés différemment, veuillez expliquer comment.
-- UPDATE --
J'ai mis en œuvre la solution de @Hao Kung. Elle crée bien une nouvelle table (par exemple, je l'ai appelée MyUsers), mais elle crée aussi toujours la table AspNetUsers. L'objectif est de remplacer la table "AspNetUsers" par la table "MyUsers". Voir le code ci-dessous et l'image de la base de données des tables créées.
Je voudrais en fait remplacer chaque AspNet
table avec mon propre nom... Par exemple, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles, et MyUsers.
Comment puis-je réaliser cela et me retrouver avec un seul jeu de tableaux ?
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 À LA 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");
}
0 votes
Êtes-vous sûr ? Veuillez supprimer toutes vos tables, supprimez votre table _migration et essayez ensuite. Le code que j'ai posté ci-dessous, qui est très similaire au vôtre, ne crée pas la table AspNetUsers.
0 votes
Pour m'en assurer, j'ai supprimé toute la base de données, et même créé un nouveau projet web c# dans Visual Studio. Il crée toutes les tables AspNet et également la table MyUsers (comme illustré ci-dessus). Il crée la table _MigrationHistory et il y a un enregistrement inséré avec un MigrationId : "201310292106426_InitialCreate"
1 votes
La seule différence entre votre code et le mien est que j'ai renommé ApplicationUser en "User". Mon comportement est très différent. Lors de la première création, les tables sont créées selon les besoins et avec les noms que j'ai spécifiés..... Peut-être juste pour "l'expérimentation" essayez de changer ApplicationUser en User et ensuite ajoutez les lignes base.OnModelCreating(modelBuilder) ; modelBuilder.Entity<IdentityUser>() .ToTable("Users", "dbo") ; modelBuilder.Entity<ApplicationUser>() .ToTable("Users", "dbo") ;
1 votes
Mise à jour de la solution ci-dessus...
0 votes
Savez-vous comment supprimer les colonnes discriminantes ?
6 votes
@Daskul Supprimer modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId") ; et dans ce cas la colonne discriminante ne sera pas ajoutée à la table MyUsers. Voir cette erreur pour plus d'informations : stackoverflow.com/questions/22054168/
0 votes
Les gars, vous m'avez sauvé la vie.
0 votes
voir ici pour vous éviter de faire des recherches. cette question et celle-là ont fait tilt.
1 votes
@user2315985 - Vous devriez mettre à jour votre réponse pour enlever la ligne contenant
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
comme mentionné par @Sergey. Sinon, le nouveau nomMyUsers
a une colonne de discrimination comme @Daskul l'a souligné. En outre, votreMyUserClaims
La structure de la table sera erronée, comme l'a souligné @Matt Overall. Je pense que l'idée d'ajouter cela est venue d'un commentaire à @Giang dans un blog msdn mais c'est faux !