none
Tabelas necessárias com Asp.Net Identity RRS feed

  • Pergunta

  • Prezados(as), sou iniciante com Asp.net e estou fazendo um site com agendamento de horários para uma barbearia. Estou utilizando o Identity do Asp.Net para autenticação e autorização dos usuários. No entanto, estou em dúvida de será necessário criar uma classe usuários para listar as informações na agenda, como usuario, o horario e o serviço agendado, ou posso utilizar as informações dos usuários extraindo do Identity? Se sim, como faço o relacionamento entre as classes, uma vez que o identity ficará em um contexto separado. Aproveitando, O contexto deve mesmo ficar separado?

    obrigado.

    terça-feira, 17 de julho de 2018 15:58

Respostas

  • Olá Pedro,

    Eu sugiro que neste caso você não separe os contextos. Crie sua nova entity no contexto padrão do Identity (IdentityContext). Desta forma você consegue relacionar ambas as tabelas adicionando as propriedades de navegação em cada uma.

    Para estender a tabela de usuários do Identity, podes criar uma classe que herde da classe IdentityUser, que é a classe base do Identity para a tabela de usuários.

    Trabalhar com contextos separados de início parece o mais correto e o melhor design. Porém relacionamentos em contextos separados não é possível, uma vez que para relacionar as entidades ambas devem ficar no mesmo contexto. Claro que você pode implementar tudo no contexto do Identity e posteriormente criar um novo contexto somente com algumas tabelas do contexto total, mas creio que no seu caso a utilização apenas do contexto do Identity seja o melhor.

    Exemplificando como estender a entidade de usuário no contexto do Identity:

    Classe customizada para a entidade de usuário:

    public class ApplicationUser : IdentityUser
        {        
            public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
            {
                // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
                var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
                // Add custom user claims here            
                userIdentity.AddClaim(new Claim("Name", this.Name));
                userIdentity.AddClaim(new Claim("Id", this.Id));            
                return userIdentity;
            }
    
            public string Name { get; set; }        
            public byte[] Image { get; set; }
        }

    Como você pode ver acima, eu adicionei uma propriedade 'Name' e uma propriedade 'Image', e minha classe ApplicationUser está herdando da classe base IdentityUser.

    Para que o Identity reconheça esta minha classe como a classe de usuários, eu preciso informar isso no contexto, conforme abaixo:

    public class IdentityContext : IdentityDbContext<ApplicationUser>
        {
            public IdentityContext() : base("name=IdentityContext")
            {
                
            }
    
            
            public static IdentityContext CreateIdentityContext()
            {
                return new IdentityContext();
            }
        }

    Então, após isso, voc~E consegue adicionar DbSet's neste contexto com suas tabelas customizadas e criando os relacionamentos necessários com a tabela de usuários.

    Blz!?

    Espero ter ajudado!

    Att,


    Fabio Rosa.

    • Marcado como Resposta Pedro Tomaz quarta-feira, 18 de julho de 2018 22:16
    • Não Marcado como Resposta Pedro Tomaz quinta-feira, 19 de julho de 2018 17:13
    • Marcado como Resposta Pedro Tomaz quinta-feira, 19 de julho de 2018 17:13
    quarta-feira, 18 de julho de 2018 12:06