Comment changer les noms de table pour ASP.net Identité 2.0 avec int ID colonnes?
J'ai utilisé ASP.net l'adhésion depuis des années et je suis juste de commencer à essayer ASP.net l'Identité. Ils viennent de sortir la version 2.0 et qui est censée soutenir int
des clés primaires. J'ai défini mon identité personnalisée classes comme suit afin d'obtenir integer primary key support:
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
}
public class UserLogin : IdentityUserLogin<int>
{
}
public class Role : IdentityRole<int, UserRole>
{
public string Description { get; set; } //Custom description field on roles
}
public class UserRole : IdentityUserRole<int>
{
}
public class UserClaim : IdentityUserClaim<int>
{
}
public class MyDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
public MyDbContext() : this("MyDB") { }
public MyDbContext(string connStringName) : base(connStringName)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
base.OnModelCreating(modelBuilder);
}
}
Lorsque je crée une migration de base de données, il crée bien un entier Identifiant de chaque colonne de l'identité des tables, cependant, il est ignorant mon tableau personnalisé noms spécifiés dans la OnModelCreating
méthode. Au lieu de cela je obtenir les noms de table comme dbo.AspNetUsers
et dbo.AspNetRoles
.
J'ai aussi essayé d'ajouter le [Table("TableName")]
à mon identité personnalisée classes et il n'a pas d'effet.
En regardant des exemples pour ASP.net l'Identité 1.0, il semblait qu'ils se répètent chaque de la modelBuilder.Entry<Type>().ToTable("TableName")
lignes à l'aide de la base de l'Identité des classes:
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<IdentityUser<int, IdentityUserLogin<int>, IdentityUserRole<int>, IdentityUserClaim<int>>>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<IdentityRole<int, UserRole>>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims");
Cependant, j'ai essayé plusieurs variantes et mon migrations ne serait pas générer. Je continue de recevoir des erreurs similaires à Le type Microsoft.AspNet.Identity.EntityFramework.IdentityUser'4[System.Int32,Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin'1[System.Int32],Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'1[System.Int32],Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim'1[System.Int32]]"n'a pas été cartographiés. Vérifiez que le type n'a pas été explicitement exclue par l'aide de l'Ignorer méthode ou NotMappedAttribute annotation de données. Vérifiez que le type a été défini comme une classe, n'est pas primitive ou génériques, et de ne pas hériter de EntityObject.
Comment puis-je générer personnalisé noms de table avec entier clés primaires dans ASP.net Identité 2.0?
- s'il vous arrive de débarquer ici à la recherche de l'identité 3.0, découvrez ce q/r>. +1 tout autour de
Vous devez vous connecter pour publier un commentaire.
Grrr...... Donc, après avoir englouti un couple d'heures sur ce, j'ai copié mes règles et collé en dessous de la
base.OnModelCreating(modelBuilder);
ligne et tout a fonctionné correctement. Je ne savais pas que la méthode de base nécessaires pour être appelé en premier 🙁Tout fonctionne correctement maintenant, en utilisant la configuration suivante:
modelBuilder.Entity<IdentityRole>().ToTable("UserRoles");
etmodelBuilder.Entity<DerivedRole>().ToTable("UserRoles");
Dans le IdentityModel.cs fichier, j'ai ajouté le code suivant à la
ApplicationDbContext
classeAvis les noms des modèles sont différents que les noms figurant dans la accepté de répondre à