Asp.net-Mvc

如何使用實體框架和成員表初始化數據庫

  • September 30, 2012

我有一個使用 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 為數據庫初始化一些預設使用者?

請查看以下文章,了解使用遷移為數據庫播種的推薦方法。

以下是步驟:

  1. 使用 Internet 模板創建一個新的 ASP.NET MVC 4 應用程序
  2. 在您的包管理器控制台中鍵入以下命令:
enable-migrations
  1. 這將創建一個~/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" });
       }
   }
}
  1. 在 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>
  1. 在包管理器控制台中執行遷移:
update-database -verbose

引用自:https://stackoverflow.com/questions/12662587