Estou usando a versão de lançamento (RTM, não RC) do Visual Studio 2013 (baixado do MSDN 2013-10-18) e, portanto, a versão mais recente (RTM) do AspNet.Identity. Quando crio um novo projeto da web, seleciono "Contas de usuário individuais" para autenticação. Isso cria as seguintes tabelas:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- Usuários AspNet
Quando eu registro um novo usuário (usando o modelo padrão), essas tabelas (listadas acima) são criadas e a tabela AspNetUsers possui um registro inserido que contém:
- Eu iria
- Nome do usuário
- PasswordHash
- SecurityStamp
- Discriminador
Além disso, adicionando propriedades públicas à classe "ApplicationUser", adicionei campos adicionais à tabela AspNetUsers, como "FirstName", "LastName", "PhoneNumber" etc.
Aqui está a minha pergunta. Existe uma maneira de alterar os nomes das tabelas acima (quando elas são criadas pela primeira vez) ou elas sempre serão nomeadas com o AspNet
prefixo conforme listado acima? Se os nomes das tabelas puderem ter nomes diferentes, explique como.
- ATUALIZAÇÃO -
Implementei a solução de @Hao Kung. Ele cria uma nova tabela (por exemplo, eu a chamei de MyUsers), mas também cria a tabela AspNetUsers. O objetivo é substituir a tabela "AspNetUsers" pela tabela "MyUsers". Veja o código abaixo e a imagem do banco de dados das tabelas criadas.
Na verdade, gostaria de substituir cada AspNet
tabela por meu próprio nome ... Por exemplo, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles e MyUsers.
Como faço isso e acabo com apenas um conjunto de tabelas?
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");
}
}
- ATUALIZAR RESPOSTA -
Agradecimentos a Hao Kung e Peter Stulinski. Isso resolveu meu 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");
}
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
as mencionadas por @Sergey. Caso contrário, a MyUsers
tabela recém nomeada possui uma coluna discriminadora, como @Daskul apontou. Além disso, a MyUserClaims
estrutura da sua tabela estará incorreta como o @Matt Overall apontou. Eu acho que a ideia de adicionar isso veio de um comentário para @Giang em um blog msdn , mas está errado!