我的猜测是你的 Seed 方法没有被调用。通过在方法中放置断点并在调试器中运行它来验证是否调用了该方法。除非您对应用程序进行了一些其他更改,否则不会使用 EF 迁移。默认情况下,数据库初始化为初始化SimpleMembershipAttribute。您将看到该属性已添加到帐户控制器中,如以下代码所示。
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
....
}
这样,只有当账户控制器被访问。您将在 Filters\InitializeSimpleMembershipAttribute.cs 中找到该定义。下面是这个类的一个代码片段,它可能可以解释为什么它没有被调用。
// Create the SimpleMembership database without Entity Framework migration schema
((IObjectContextAdapter)context).ObjectContext.CreateDatabase();
里面的很多代码初始化SimpleMembershipAttribute用于处理 MVC 应用程序不使用表单身份验证的情况。如果您始终使用表单身份验证,则可以消除此代码并自行初始化数据库。只需从 AccountController 中删除此属性并将您自己的初始化代码放入 Global.asax 中即可应用程序_启动方法。你可以添加这样的东西到应用程序_启动 method
Database.SetInitializer<UsersContext>(new MyDBInitializer());
种子方法看起来像这样
WebSecurity.InitializeDatabaseConnection("DefaultConnection",
"UserProfile", "UserId", "UserName", autoCreateTables: true);
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;
if (!roles.RoleExists("Admin"))
{
roles.CreateRole("Admin");
}
if (membership.GetUser("user1", false) == null)
{
membership.CreateUserAndAccount("user1", "123456");
}
if (!roles.GetRolesForUser("user1").Contains("Admin"))
{
roles.AddUsersToRoles(new[] { "user1" }, new[] { "Admin" });
}
请注意,您需要初始化 Web 矩阵安全数据库Seed方法通过调用WebSecurity.InitializeDatabaseConnection method.
您可以在此处找到有关播种 SimpleMembership 的更多详细信息博客文章 http://kevin-junghans.blogspot.com/2013/01/seeding-customizing-aspnet-mvc.html,其中包括示例项目的完整源代码。