Tenho brincado com o novo MVC 5, tenho alguns modelos, controladores e configurações de visualizações usando migrações iniciais de código.
Minha pergunta é como eu semeio usuários e funções? Atualmente, eu semeio alguns dados de referência em meu método Seed em Configuration.cs. Mas parece-me que as tabelas de usuário e funções não são criadas até que algo acesse o AccountController.
Atualmente, tenho duas strings de conexão para que possa separar meus dados de minha autenticação em bancos de dados diferentes.
Como posso fazer com que as tabelas de usuário, funções, etc. sejam preenchidas junto com minhas outras? E não quando o controlador de conta é atingido?
asp.net-mvc
asp.net-mvc-5
ef-migrations
seeding
MrBeanzy
fonte
fonte
Respostas:
Aqui está um exemplo de abordagem Seed usual:
Eu usei o gerenciador de pacotes "update-database". DB e todas as tabelas foram criadas e propagadas com dados.
fonte
context.Users.Add(user);
entremanager.Create(user, "ChangeItAsap!");
emanager.AddToRole(user.Id, "AppAdmin");
. Portanto, o usuário recém-nascido não tem User.Id.É uma pequena adição, mas para qualquer um que tenha o "UserId não encontrado". mensagem ao tentar semear: (Tom Regan tinha essa pergunta nos comentários, e eu mesmo fiquei preso nela por um tempo)
Isso significa que o manager.Create (usuário, "ChangeItAsap!") Não foi bem-sucedido. Isso pode ter um motivo diferente, mas para mim era porque minha senha não estava sendo validada.
Eu tinha um validador de senha personalizado, que não estava sendo chamado durante a propagação do banco de dados, então as regras de validação com as quais eu estava acostumado (minlength 4 em vez do padrão 6) não se aplicavam. Certifique-se de que sua senha (e todos os outros campos para esse assunto) está passando na validação.
fonte
IdentityResult result = manager.Create(user, "ChangeItAsap!"); if (result.Succeeded == false) { throw new Exception(result.Errors.First()); }
Este é o meu método baseado na resposta do Valin, adicionei funções no banco de dados e adicionei a senha do usuário. Este código é colocado no
Seed()
método em Migrations> Configurations.cs.fonte
Aqui tenho uma solução muito fácil, limpa e suave.
fonte
fonte
Task.Run(async () => { await SeedAsync(context); }).Wait();
. Você deve antes escrever oSeedAsync(context).GetAwait().GetResult();
que é um pouco melhor.Parece que eles mudaram a forma como a autenticação funciona no MVC5, mudei meu Global.asax.cs para o seguinte funcionou!
fonte
escreva este código em sua configuração de migração.
fonte