Como inicializar o banco de dados com o Entity Framework e a Associação de tabelas
Pergunta
Eu tenho um MVC4 aplicativo web que use Entity Framework 5.0 Código Primeiro.
No Global.asax.cs eu tenho um bootstrapper que inicializar a Entidade.Banco de dados, forçar o banco de dados ser inicializada e inicializar o banco de dados para a Associação.O código é esse:
System.Data.Entity.Database.SetInitializer(new DatabaseContextInitializer());
Database.Initialize(true);
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);
O DatabaseContextInitializer é muito simples para o 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"})
}
}
O problema é que eu não posso criar o Usuário para a associação com:
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);
Porque eu tenho um problema com o banco de dados não é criado.Como você inicializar alguns de usuário padrão para o banco de dados com o Entity Framework 5.0 e Asp.Net MVC 4?
Solução
Dê uma olhada no seguinte artigo para a abordagem recomendada para a semeadura seu banco de dados usando as migrações.
Aqui estão as etapas:
- Criar um novo ASP.NET MVC 4 aplicação utilizando o Modelo de Internet
No seu gerenciador de pacotes tipo de console o seguinte comando:
enable-migrations
Isto irá criar um
~/Migrations/Configuration.cs
arquivo no qual você pode semente de seu banco de dados: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" }); } } }
Especificar a memebership e provedores de função em sua 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>
Executar a migração, o seu gerenciador de pacotes do console:
update-database -verbose