c# - mvc - Primera base de datos de la base de datos de la entidad de identidad Asp.net con su propia definiciĆ³n de tabla
mostrar datos de una tabla sql en c# (1)
Tengo debajo de cuatro tablas
Mesa de roles
Tabla de usuario
Tabla UserRole
Tabla UserType
identidad predeterminada de Asp.net con tablas inferiores como Asp.netusers, Asp.netRoles, Asp.netuserlogins, Asp.netuserclaims, Asp.netuserroles
Mi tabla no coincide con el mismo nombre de columna y algunas columnas no disponibles en mis tablas. ¿Puedo usar mis propias tablas para utilizar la característica de la identidad de asp.net? De lo contrario, tendré que seguir las mismas columnas que usé en la tabla Asp.netusers en mi tabla de usuarios.
¿Es eso todas las columnas necesarias para agregar en mi tabla?
Ya he implementado asp.net identity EF database first approach con las mismas tablas predeterminadas. Tengo una tienda de roles y una tienda de usuarios separadas
contexto debajo de aquí los usuarios, userroles son las mismas tablas predeterminadas que en asp.net identity (asp.netusers, asp.netroles)
public partial class OVT_UserEntities : DbContext
{
public OVT_UserEntities()
: base("name=OVT_UserEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<UserClaim> UserClaims { get; set; }
public virtual DbSet<UserLogin> UserLogins { get; set; }
public virtual DbSet<UserRole> UserRoles { get; set; }
public virtual DbSet<User> Users { get; set; }
}
Clase de usuario:
public partial class User : IUser<int>
{
}
Clase de rol:
public partial class UserRole : IRole<int>
{
}
Ahora quiero usar las cuatro tablas nuevas (imágenes de diseño de tabla anteriores) en lugar de las tablas existentes proporcionadas por la identidad asp.net. Entonces, no estoy seguro de si todas las tablas y columnas deben agregarse en mi base de datos para trabajar en la identidad de asp.net.
Como está utilizando Microsoft.AspNet.Identity
, debe heredar su usuario de IdentityUser
(namespace Microsoft.AspNet.Identity.EntityFramework
).
Tus clases deberían definirse así:
USUARIO
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
}
PAPEL
public class Role : IdentityRole<int, UserRole>
{
}
ROL DEL USUARIO
public class UserRole : IdentityUserRole<int>
{
}
RECLAMACIÓN DE USUARIO
public class UserClaim : IdentityUserClaim<int>
{
}
INICIO DE SESIÓN DE USUARIO
public class UserLogin : IdentityUserLogin<int>
{
}
Puede extender las clases agregando sus propias columnas personalizadas:
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
public string CompanyName { get; set; }
}
Ahora debes definir las tiendas:
public class UserStore: UserStore<User, Role, int, UserLogin, UserRole, UserClaim>
{
public UserStore(MyContext context)
: base(context)
{
}
}
y luego su contexto de base de datos, heredando de IdentityDbContext
:
public class MyContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
public MyContext(): base("ConnectionString")
{
}
}
En el contexto de su base de datos ( MyContext ), debe anular OnModelCreating
para que pueda crear sus columnas, tipos de cambio, nombres de tablas, etc., etc.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyUser>()
.Property(p => p.Id)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyRole>()
.Property(p => p.Id)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserRole>()
.Property(p => p.RoleId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserRole>()
.Property(p => p.UserId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserClaim>()
.Property(p => p.Id)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserClaim>()
.Property(p => p.UserId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserLogin>()
.Property(p => p.UserId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUser>()
.ToTable("Users");
modelBuilder.Entity<MyRole>()
.ToTable("Roles");
modelBuilder.Entity<MyUserRole>()
.ToTable("UserRoles");
modelBuilder.Entity<MyUserClaim>()
.ToTable("UserClaims");
modelBuilder.Entity<MyUserLogin>()
.ToTable("UserLogins");
}
Ahora puede usar migraciones para generar sus tablas.
He actualizado un proyecto github para reflejar tu situación.
ACTUALIZAR :
Si desea personalizar los nombres y tipos de sus columnas, simplemente debe darles un nombre:
modelBuilder.Entity<User>()
.Property(p => p.Id)
.HasColumnName("user_id")
.HasColumnType("SMALLINT")
.IsRequired();