Estoy usando la versión de lanzamiento (RTM, no RC) de Visual Studio 2013 (descargada de MSDN 2013-10-18) y, por lo tanto, la última versión (RTM) de AspNet.Identity. Cuando creo un nuevo proyecto web, selecciono "Cuentas de usuario individuales" para la autenticación. Esto crea las siguientes tablas:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
Cuando registro un nuevo usuario (usando la plantilla predeterminada), se crean estas tablas (enumeradas anteriormente) y la tabla AspNetUsers tiene un registro insertado que contiene:
- Carné de identidad
- Nombre de usuario
- PasswordHash
- Sello de seguridad
- Discriminado
Además, al agregar propiedades públicas a la clase "ApplicationUser", he agregado con éxito campos adicionales a la tabla AspNetUsers, como "FirstName", "LastName", "PhoneNumber", etc.
Aquí está mi pregunta. ¿Hay alguna manera de cambiar los nombres de las tablas anteriores (cuando se crean por primera vez) o siempre se nombrarán con el AspNet
prefijo que mencioné anteriormente? Si los nombres de las tablas se pueden nombrar de manera diferente, explique cómo.
- ACTUALIZACIÓN -
Implementé la solución de @Hao Kung. Sí crea una nueva tabla (por ejemplo, la llamé MyUsers), pero también crea la tabla AspNetUsers. El objetivo es reemplazar la tabla "AspNetUsers" con la tabla "MyUsers". Vea el código a continuación y la imagen de la base de datos de las tablas creadas.
En realidad, me gustaría reemplazar cada AspNet
tabla con mi propio nombre ... Por ejemplo, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles y MyUsers.
¿Cómo logro esto y termino con un solo conjunto de tablas?
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");
}
}
- ACTUALIZAR RESPUESTA -
Gracias a Hao Kung y Peter Stulinski. Esto resolvió mi problema ...
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");
}
fuente
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
lo mencionado por @Sergey. De lo contrario, laMyUsers
tabla recién nombrada tiene una columna discriminadora como señaló @Daskul. Además, laMyUserClaims
estructura de su tabla será incorrecta, como señaló @Matt Overall. Creo que la idea de agregar eso vino de un comentario a @Giang en un blog de msdn , ¡pero está mal!Respuestas:
Puede hacerlo fácilmente modificando IdentityModel.cs según lo siguiente:
Anule OnModelCreating en su DbContext y luego agregue lo siguiente, esto cambiará la tabla AspNetUser a "Usuarios", también puede cambiar los nombres de campo, la columna de Id predeterminada se convertirá en User_Id.
o simplemente el siguiente si desea mantener todos los nombres de columna estándar:
Ejemplo completo a continuación (esto debería estar en su archivo IdentityModel.cs) cambié mi clase ApplicationUser para que se llame Usuario.
Tenga en cuenta que no he logrado que esto funcione si existe la tabla actual. También tenga en cuenta las columnas que no asigne, se crearán las predeterminadas.
Espero que ayude.
fuente
base.OnModelCreating
sea la primera línea de código en la anulación; de lo contrario, el resto de las líneas serán sobrescritas por la clase de identidad base.A continuación se muestra mi solución de trabajo:
Mira esto para más detalles
fuente
[text](link)
Puede intentar anular este método en su clase DbContext para asignarlo a una tabla de su elección:
fuente
base.OnModelCreating(modelBuilder);
o el resto del modelo no se creará.También puede crear clases de configuración y especificar cada detalle de cada una de sus clases de identidad, por ejemplo:
Y luego incluya estas configuraciones en el método OnModelCreating ():
Esto le dará un control completo sobre cada aspecto de las clases de identidad.
fuente
Solo para fines de documentación, para el que llega a esta publicación en los años que tenga años en el futuro, (como yo XD), todas las respuestas dadas en mi comentario son correctas, pero puede simplemente usar este método dado por Alexandru Bucur en su blog
fuente
Podemos cambiar los nombres de tabla predeterminados de Identidad asp.net de esta manera:
Además, podemos extender cada clase y agregar cualquier propiedad a clases como 'IdentityUser', 'IdentityRole', ...
Para ahorrar tiempo, podemos usar la plantilla de proyecto extensible AspNet Identity 2.0 para extender todas las clases.
fuente
Pero no funciona en .NET CORE (MVC 6) para eso necesitamos cambiar el enlace a
me gusta
Podría ayudar a alguien :)
fuente