I have a MVC4 web application that use Entity Framework 5.0 Code First.
In Global.asax.cs I have a bootstrapper that initialize the Entity.Database, force the database to be initialized and initialize the database for the Membership. The code is this one:
System.Data.Entity.Database.SetInitializer(new DatabaseContextInitializer()); Database.Initialize(true); WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);
The DatabaseContextInitializer is very simple for the moment:
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"}) } }
The problem is that I cannot create User to the membership with:
WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION, "UserProfile", "UserId", "UserName", autoCreateTables: true);
Because I have a problem with that the database is not created. How do you initialize some default user for your database with Entity Framework 5.0 and Asp.Net MVC 4?
DropCreateDatabaseAlways: This strategy of code first approach creates the database every time you run the application. If the database already exists and there is no modification done in the model, it will drop the database and create a new one. In this approach, you will also lose the data.
DropCreateDatabaseAlways: As the name suggests, this initializer drops an existing database every time you run the application, irrespective of whether your model classes have changed or not.
Take a look at the following article for the recommended approach for seeding your database using migrations.
Here are the steps:
In your package manager console type the following command:
enable-migrations
This will create a ~/Migrations/Configuration.cs
file in which you could seed your database:
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" }); } } }
Specify the memebership and role providers in your 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>
Run the migration in your package manager console:
update-database -verbose
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With