Asp.net-Mvc
如何使用實體框架和成員表初始化數據庫
我有一個使用 Entity Framework 5.0 Code First 的 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, "UserProfile", "UserId", "UserName", autoCreateTables: true);因為我有一個問題是沒有創建數據庫。如何使用 Entity Framework 5.0 和 Asp.Net MVC 4 為數據庫初始化一些預設使用者?
請查看以下文章,了解使用遷移為數據庫播種的推薦方法。
以下是步驟:
- 使用 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", "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" }); } } }
- 在 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>
- 在包管理器控制台中執行遷移:
update-database -verbose