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");
}
fonte
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
as mencionadas por @Sergey. Caso contrário, aMyUsers
tabela recém nomeada possui uma coluna discriminadora, como @Daskul apontou. Além disso, aMyUserClaims
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!Respostas:
Você pode fazer isso facilmente modificando o IdentityModel.cs conforme abaixo:
Substitua OnModelCreating no seu DbContext e adicione o seguinte, isso mudará a tabela AspNetUser para "Users". Você também pode alterar os nomes dos campos nos quais a coluna Id padrão se tornará User_Id.
ou simplesmente o abaixo, se você deseja manter todos os nomes de colunas padrão:
Exemplo completo abaixo (isso deve estar no seu arquivo IdentityModel.cs). Alterei minha classe ApplicationUser para ser chamada de Usuário.
Observe que não consegui fazer isso funcionar se a tabela atual existir. Observe também as colunas que você não mapeia, as colunas padrão serão criadas.
Espero que ajude.
fonte
base.OnModelCreating
é a primeira linha de código na substituição, caso contrário, as demais linhas serão substituídas pela classe Identity base.Abaixo está minha solução de trabalho:
Veja isto para mais detalhes
fonte
[text](link)
Você pode tentar substituir esse método na sua classe DbContext para mapeá-lo para uma tabela de sua escolha:
fonte
base.OnModelCreating(modelBuilder);
ou o restante do modelo não será criado.Você também pode criar classes de configuração e especificar todos os detalhes de cada uma das suas classes de identidade, por exemplo:
E inclua estas configurações no método OnModelCreating ():
Isso lhe dará controle completo sobre todos os aspectos das classes Identity.
fonte
Apenas para fins de documentação, para quem vem a este post sobre os próximos anos no futuro (como eu, XD), todas as respostas dadas no meu comentário estão corretas, mas você pode simplesmente brincar com esse método dado por Alexandru Bucur em seu blog.
fonte
Podemos alterar os nomes de tabela padrão da identidade do asp.net assim:
Além disso, podemos estender cada classe e adicionar qualquer propriedade a classes como 'IdentityUser', 'IdentityRole', ...
Para economizar tempo, podemos usar o modelo de projeto extensível do AspNet Identity 2.0 para estender todas as classes.
fonte
Mas ele não funciona no .NET CORE (MVC 6), pelo que precisamos alterar a ligação para
gostar
Pode ajudar alguém :)
fonte