.NET

8 mar, 2013

Como trabalhar com Membership no Entity Framework Code First

Publicidade

Precisei trabalhar com Membership para controle de usuários, mas queria usar o code first do Entity Framework. Quem já usou o Membership antes sabe que ele costuma criar sozinho uma estrutura de tabelas e trabalha com ela sozinho. Uma coisa que já vi fazerem numa empresa em que trabalhei foi customizar o Membership, criando campos para a classe user, por exemplo, mas, se bem me lembro, ele ainda cuidava de sua integração do banco sozinho. E eu nunca tinha feito isso sozinha, e muitos artigos e posts que li sobre EF Code First e Membership sugeriam praticamente refazer as classes do Membership. Até que eu achei a solução: CodeFirst Member Provider.

O CodeFirst Member Provider

É um projeto pequeno, não tem página própria além da página do projeto no codeplex, e nem tem documentação (confesso que fiquei interessada em ajudar nessa parte).

Conheci o projeto ontem, ainda não vi muito a fundo, mas achei uma solução bem bacana. Nas instruções da página do projeto há um pequeno manual:

  • Crie um projeto mvc;
  • Baixe o pacote do nuget;
  • Rode o projeto;
  • O usuário e role pré configuradas no seed do DataContextInitializer vão funcionar normalmente.

Sim, é só isso.

O que ele acrescenta no meu projeto?

Após baixar os pacotes pelo nuget, você vai ver uma pequena transformação no seu projeto. A primeira coisa é que ele cria uma pasta Entities onde deixa as poco de Role e User. Também cria uma pasta Context com uma classe DataContext e DataContexInitializer. Também é criado uma pasta Membership e é aqui que está o coração do provider.

Nessa pasta temos: Crypto.cs, que não preciso explicar, né? Ela cuida do encriptamento, muito importante para o básico de segurança. Só o básico. Há o CodeFirstRoleProvider que vai manter as Roles, criando, excluindo, buscando, etc.

Há o CodeFirstMembershipProvider.cs, que manterá o usuário, criando, excluindo, vendo os usuários logados, deletando, bloqueando (lock), mudando a senha e validando usuário.

E por fim, a WebSecurity.cs que vai amarrar de fato as classes da Entities com o Membership e cuidar do HttpContext, HttpResponse e HttpRequest.

Também serão acrescentadas algumas chaves no seu web.config. Sem elas, o provider não vai conseguir trabalhar direito.

Sim e é só isso. Depois você vai conseguir trabalhar com o membership normalmente. Pelo menos estou trabalhando sem problemas com ele.

Baixe o exemplo

Você pode baixar um exemplo de graça na Gallerya de Códigos da MSDN onde há um simples site usando asp.net mvc 4. O  banco de dados usado é Sql CE, então vai fucnionar mesmo que você não tenha o sql server na máquina.

Caso queira ler mais sobre como usar Sql CE com Entity Framework leia outro artigo aqui no Imasters: utilizando Entity Framework com Sql CE.