É possível usar a nova identidade Asp.net com Database First e EDMX? Ou apenas com o código primeiro?
Aqui está o que eu fiz:
1) Fiz um novo projeto MVC5 e fiz com que a nova identidade criasse as novas tabelas de usuário e funções em meu banco de dados.
2) Em seguida, abri meu arquivo EDMX do Database First e arrastei para a nova tabela Identity Users, pois tenho outras tabelas relacionadas a ela.
3) Ao salvar o EDMX, o gerador POCO do Database First criará automaticamente uma classe de usuário. No entanto, UserManager e RoleManager esperam que uma classe User herde do novo namespace Identity (Microsoft.AspNet.Identity.IUser), portanto, usar a classe POCO User não funcionará.
Eu acho que uma solução possível é editar minhas classes de geração de POCO para que minha classe de usuário herde de IUser?
Ou a identidade do ASP.NET é compatível apenas com o Code First Design?
+++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
Atualização: Seguindo a sugestão de Anders Abel abaixo, foi o que fiz. Funciona, mas gostaria de saber se existe uma solução mais elegante.
1) Eu estendi minha classe de usuário de entidade criando uma classe parcial dentro do mesmo namespace que minhas entidades geradas automaticamente.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Mudei meu DataContext para herdar de IdentityDBContext em vez de DBContext. Observe que toda vez que você atualiza seu EDMX e regenera as classes DBContext e Entity, você terá que definir isso novamente.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) Em sua classe de entidade User gerada automaticamente, você deve adicionar a palavra-chave override aos 4 campos a seguir ou comentar esses campos, uma vez que são herdados de IdentityUser (Etapa 1). Observe que toda vez que você atualiza seu EDMX e regenera as classes DBContext e Entity, você terá que definir isso novamente.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }