Cómo inicializar la base de datos con marco de entidad y tablas de membresía
Pregunta
Tengo una aplicación web MVC4 que usa el código de la entidad Marco 5.0 primero.
En global.asax.cs Tengo un bootstrapper que inicializa la entidad.database, forzar la base de datos a inicializar e inicializar la base de datos para la membresía.El código es este:
System.Data.Entity.Database.SetInitializer(new DatabaseContextInitializer());
Database.Initialize(true);
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);
El DatabaseContextinitializer es muy simple por el momento:
public class DatabaseContextInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
protected override void Seed(DatabaseContext dbContext)
{
base.Seed(dbContext);
db.Set<Workout>().Add(new Workout {Id = 1, Name = "My First workout user1"})
}
}
El problema es que no puedo crear usuario a la membresía con:
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);
Porque tengo un problema con el que no se crea la base de datos.¿Cómo inicializa algún usuario predeterminado para su base de datos con Entity Framework 5.0 y ASP.NET MVC 4?
Solución
Eche un vistazo a la Siguiendo el artículo para el enfoque recomendado para sembrar su base de datos utilizando migraciones.
Aquí están los pasos:
- Crear una nueva aplicación ASP.NET MVC 4 usando la plantilla de Internet
-
En su consola del administrador de paquetes, escriba el siguiente comando:
enable-migrations
-
Esto creará un archivo
~/Migrations/Configuration.cs
en el que podría sembrar su base de datos:using System.Data.Entity.Migrations; using System.Linq; using System.Web.Security; using WebMatrix.WebData; internal sealed class Configuration : DbMigrationsConfiguration<MvcApplication1.Models.UsersContext> { public Configuration() { AutomaticMigrationsEnabled = true; } protected override void Seed(MvcApplication1.Models.UsersContext context) { WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); if (!Roles.RoleExists("Administrator")) { Roles.CreateRole("Administrator"); } if (!WebSecurity.UserExists("john")) { WebSecurity.CreateUserAndAccount("john", "secret"); } if (!Roles.GetRolesForUser("john").Contains("Administrator")) { Roles.AddUsersToRoles(new[] { "john" }, new[] { "Administrator" }); } } }
-
Especifique la membrenera y los proveedores de roles en su web.config:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider"> <providers> <clear/> <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/> </providers> </roleManager> <membership defaultProvider="SimpleMembershipProvider"> <providers> <clear/> <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> </providers> </membership>
-
Ejecute la migración en su consola del administrador de paquetes:
update-database -verbose