在我的项目中,我首先使用 WebSecurity 和 EF 代码迁移。
我有我想与 WebSecurity 结合的自定义 UserProfile 类。
我想在种子方法的迁移配置类中为用户播种。
所以我试试这个:
#1)
if (!Roles.RoleExists("admin"))
Roles.CreateRole("admin");
if (!WebSecurity.UserExists(AdminUserName))
WebSecurity.CreateUserAndAccount(
AdminUserName,
"admin",
new {Email = "admin@mindmap.pl"});
但它抱怨我应该先调用 WebSecurity.InitializeDatabaseConnection 。
好的,这是有道理的。所以我在我的 Global.asax 中添加了以下几行:
#2)
WebSecurity.InitializeDatabaseConnection(
_connectionStringName,
"UserProfiles",
"Id",
"UserName",
autoCreateTables: true);
但比以下几行:
#3)
var dbMigrator = new DbMigrator(_configuration);
dbMigrator.Update();
抛出错误:
数据库中已经有一个名为“UserProfiles”的对象。
好吧,这又是有意义的,因为迁移尝试创建刚刚由 WebSecurity 创建的表。
我找到了一种解决方法:我将#2) 放在#1) 的顶部。比它奏效了。
- 迁移创建了 UserProfiles 表
- WebSecurity 附加到现有的 UserProfiles 表并创建了它需要的其他表
- Seeds 在找到所需的表并初始化 WebSecurity 时工作。
问题是我必须在种子方法中初始化 WebSecurity,这有点臭。
我的问题是如何将 WebSecurity.InitializeDatabaseConnection 移回 Global.asax?