En aplicaciones ASP MVC es necesario en muchas ocasiones inicializar la base de datos con usuarios. En este post veremos como hacer un seed en un proyecto de MVC 5 usando Entity Framework, Migrations e Identity, añadiendo usuarios por defecto.
Para realizar este post, usaremos una aplicación MVC 5 que usa por defecto para la gestión de usuarios, roles e identidades: ASP .NET Identity 2.0. Por otra parte, ASP .NET Identity 2.0 usa Entity Framework para crear la base de datos, usando sus funcionalidades de code first.
Para hacer un seed a la base de datos, primero necesitamos habilitar las migraciones en el proyecto. Para ello, es necesario usar el comando:
1 |
enable-migrations |
Después de habilitar las migraciones con éxito, en nuestro proyecto se habrá generado una carpeta “Migrations”, con una clase llamada “Configurations”:

El archivo “Configurations.cs” sirve para configurar las migraciones de Entity Framework. Aquí encontraremos un método “Seed”, y es en este método donde pondremos las lineas que sirven para inicializar nuestra base de datos.

Usando LINQ to Entity
En este método “Seed”, aprovechando las funcionalides de LINQ to Entity incializaremos nuestros usuarios en la base de datos. Para ello:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
protected override void Seed(identitysampledefaultdata.Models.ApplicationDbContext context) { // This method will be called after migrating to the latest version. var passwordHash = new PasswordHasher(); string password = passwordHash.HashPassword("Password@123"); context.Users.AddOrUpdate(u => u.UserName, new ApplicationUser { UserName = "user@user.com", PasswordHash = password, SecurityStamp = Guid.NewGuid().ToString() }); } |
Lo único que necesitamos es realizar manualmente el Hash de la contraseña. El ASP .NET Identity nos proporciona la clase PasswordHasher para crear un password hash de la contraseña dada como string. Finalmente se inserta el usuario usando el metodo AddorUpdate.
Importante completar el campo SecurityStamp, ya que sino en el momento de hacer el login el sistema denegará automáticamente el acceso.
Por ultimo, ejecutar en la Consola del Administrador de paquetes (se puede acceder desde “Ver >> Otras ventanas >> Consola del Administrador de paquetes”), el comando:
1 |
update-database |
Asegurarse que en nuestro “Configuration.cs” la propiedad “AutomaticMigrationEnabled” esta a true.

Usando UserManager
Existe otra forma, usando UserManager de ASP .NET Identity, aunque no es valida para este método Seed de Migrations. ya que UserManager es un objeto IDisposable. Aun así, es útil para usarlo en otras fases de nuestro proyecto que si permitan usar UserManager, ya que este gestiona el hash de las contraseñas de forma automática, y por tanto, más simple (sin que el anterior no lo fuera de por si).
1 2 3 4 5 6 7 8 9 10 11 12 |
protected override void Seed(identitysampledefaultdata.Models.ApplicationDbContext context) { // This method will be called after migrating to the latest version. if (!(context.Users.Any(u => u.UserName == "user@user.com"))) { var userStore = new UserStore<ApplicationUser>(context); var userManager = new UserManager<ApplicationUser>(userStore); var userToInsert = new ApplicationUser { UserName = "user@user.com" }; userManager.Create(userToInsert, "Password@123"); } } |
Para crear un usuario utilizando UserManager:
- Crear una instancia de UserStore del tipo ApplicationUser (o la clase que usemos en Identity para los usuarios), usando el context (el contexto de datos de esta aplicación) en el constructor
- Crear una instancia de UserManager del tipo ApplicationUser y pasar la instancia de UserStore en el constructor
- Crear el usuario llamando al método Create del UserManager instanciado
Javi Giner
Latest posts by Javi Giner (see all)
- IIS Express Visual Studio, como configurar para permitir conexiones remotas - febrero 26, 2016
- Evento solidario sobre Innovación - diciembre 14, 2015
- Uso de Component en Unity - noviembre 10, 2015
Interesante, más aún porque no hay mucho acerca de cómo usar ASP.NET Identity 2.0
Hola! Muchas gracias. Si necesitas más cosas sobre Identity in ASP MVC, no dudes en preguntar. Saludos
Hola has usado .net Identity pero para compartir el ñpgin entre varias sub aplicaciones. O sea, me logeo una vez y puedo acceder a todas las aplicaciones instaladas en el dominio…