He estado jugando con el nuevo MVC 5, tengo algunos modelos, controladores y configuraciones de vistas usando las primeras migraciones de código.
Mi pregunta es ¿cómo puedo sembrar usuarios y roles? Actualmente siembro algunos datos de referencia en mi método Seed en Configuration.cs. Pero me parece que las tablas de usuarios y roles no se crean hasta que algo llega al AccountController.
Actualmente tengo dos cadenas de conexión para poder separar mis datos de mi autenticación en diferentes bases de datos.
¿Cómo puedo hacer que las tablas de usuarios, roles, etc. se llenen junto con las otras? ¿Y no cuando se golpea el controlador de cuenta?
asp.net-mvc
asp.net-mvc-5
ef-migrations
seeding
MrBeanzy
fuente
fuente
Respuestas:
A continuación se muestra un ejemplo del enfoque de semillas habitual:
Usé el administrador de paquetes "update-database". DB y todas las tablas fueron creadas y sembradas con datos.
fuente
context.Users.Add(user);
entremanager.Create(user, "ChangeItAsap!");
ymanager.AddToRole(user.Id, "AppAdmin");
. Entonces, el usuario recién nacido no tiene User.Id.Es una pequeña adición, pero para cualquiera que tenga el "UserId no encontrado". mensaje al intentar sembrar: (Tom Regan tenía esta pregunta en los comentarios, y yo me quedé atrapado en ella por un tiempo)
Esto significa que manager.Create (usuario, "ChangeItAsap!") No tuvo éxito. Esto podría tener una razón diferente, pero para mí fue porque mi contraseña no estaba teniendo éxito en su validación.
Tenía un validador de contraseña personalizado, que no se llamaba al sembrar la base de datos, por lo que las reglas de validación a las que estaba acostumbrado (longitud mínima 4 en lugar de 6 por defecto) no se aplicaron. Asegúrese de que su contraseña (y todos los demás campos para el caso) esté pasando la validación.
fuente
IdentityResult result = manager.Create(user, "ChangeItAsap!"); if (result.Succeeded == false) { throw new Exception(result.Errors.First()); }
Esta es mi base de método en la respuesta de Valin, he agregado roles en db y agregué contraseña para el usuario. Este código se coloca en
Seed()
método en Migraciones> Configuraciones.cs.fuente
Aquí tengo una solución muy fácil, limpia y suave.
fuente
fuente
Task.Run(async () => { await SeedAsync(context); }).Wait();
. Deberías escribirSeedAsync(context).GetAwait().GetResult();
cuál es ligeramente mejor.Parece que cambiaron la forma en que funciona la autenticación en MVC5, cambiaron mi Global.asax.cs a lo siguiente, ¡hicieron el truco!
fuente
escriba este código en su configuración de migración.
fuente