seguridad que net mvc implementar framework asp c# asp.net asp.net-identity

c# - que - seguridad asp net mvc 5



¿Cómo cambiar los nombres de las tablas para ASP.net Identity 2.0 con columnas int ID? (2)

He usado la membresía de ASP.net durante años y estoy empezando a probar la identidad de ASP.net. Acaban de lanzar la versión 2.0 y se supone que es compatible con las claves primarias int . He definido mis clases de identidad personalizadas de la siguiente manera para obtener soporte de clave primaria de entero:

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); } }

Cuando creo una migración de base de datos, crea correctamente una columna de ID de entero para cada una de las tablas de identidad, sin embargo, ignora mis nombres de tabla personalizados especificados en el método OnModelCreating . En cambio, obtengo nombres de tablas como dbo.AspNetUsers y dbo.AspNetRoles .

También he intentado agregar la [Table("TableName")] a mis clases de identidad personalizadas y no tiene ningún efecto.

Al mirar ejemplos para ASP.net Identity 1.0, parecía que repetían cada una de las modelBuilder.Entry<Type>().ToTable("TableName") usando las clases de Identidad básicas:

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");

Sin embargo, probé varias variaciones y mis migraciones no se generarían. Seguí recibiendo errores similares a los del tipo Microsoft.AspNet.Identity.EntityFramework.IdentityUser''4 [System.Int32, Microsoft.AspNet.Identity.EntityFramework.Identity.itlots.thdentity.serLogin''1 [System.Int32], Microsoft.AspNet.IspNet.Identity.podent.thdentity.serLogin''1 [System.Int32]. ''1 [System.Int32], Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim''1 [System.Int32]]'' no se asignó. Compruebe que el tipo no se haya excluido explícitamente mediante el método Ignorar o la anotación de datos NotMappedAttribute. Verifique que el tipo se haya definido como una clase, no sea primitivo ni genérico, y no herede de EntityObject.

¿Cómo puedo generar nombres de tabla personalizados con claves primarias enteras en ASP.net Identity 2.0?


En el archivo IdentityModel.cs, agregué el siguiente código a la clase ApplicationDbContext

Observe que los nombres de los modelos son diferentes a los nombres que figuran en la respuesta aceptada

protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<ApplicationUser>().ToTable("SystemUsers"); modelBuilder.Entity<IdentityRole>().ToTable("SystemRoles"); modelBuilder.Entity<IdentityUserRole>().ToTable("SystemUserRoles"); modelBuilder.Entity<IdentityUserLogin>().ToTable("SystemUserLogins"); modelBuilder.Entity<IdentityUserClaim>().ToTable("SystemUserClaims"); }


Grrr ...... Entonces, después de perder un par de horas en esto, copié mis reglas y las pegué debajo de la base.OnModelCreating(modelBuilder); Línea y todo funcionó correctamente. No me di cuenta de que el método base debía llamarse primero :(

Todo funciona correctamente ahora usando la siguiente configuración:

protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // This needs to go before the other rules! 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"); }