我有一个使用实体框架5.0代码优先的MVC4 Web应用程序。
在Global.asax.cs中,我有一个引导程序,初始化Entity.Database,强制数据库被初始化并初始化成员资格的数据库。代码是这样的:
- System.Data.Entity.Database.SetInitializer(new DatabaseContextInitializer());
- Database.Initialize(true);
- WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION,"UserProfile","UserId","UserName",autoCreateTables: true);
DatabaseContextInitializer目前很简单:
- 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"})
- }
- }
问题是我无法创建用户到成员资格:
- WebSecurity.InitializeDatabaseConnection(DEFAULTCONNECTION,autoCreateTables: true);
因为我有一个问题,数据库没有创建。如何使用Entity Framework 5.0和Asp.Net MVC 4为数据库初始化一些默认用户?
解决方法
请查看
following article的推荐方法,使用迁移种植您的数据库。
这里是步骤:
>使用Internet模板创建一个新的ASP.NET MVC 4应用程序
>在您的包管理器控制台中键入以下命令:
- enable-migrations
>这将创建一个〜/ Migrations / Configuration.cs文件,您可以在其中种子您的数据库:
- 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",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" });
- }
- }
- }
>在web.config中指定memebership和角色提供程序:
- <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>
>在包管理器控制台中运行迁移:
- update-database -verbose