相关疑难解决方法(0)

WebSecurity.InitializeDatabaseConnection不与代码首次迁移配合使用

在我的项目中,我首先使用WebSecurity和EF代码进行迁移.

我有我想要与WebSecurity结合的自定义UserProfile类.

我想在Seed方法的迁移'Configuration类中为用户播种.

所以我试试这个:

#1)
if (!Roles.RoleExists("admin"))
            Roles.CreateRole("admin");

if (!WebSecurity.UserExists(AdminUserName))
    WebSecurity.CreateUserAndAccount(
        AdminUserName,
        "admin",
        new {Email = "admin@mindmap.pl"});
Run Code Online (Sandbox Code Playgroud)

但它抱怨我应该首先调用WebSecurity.InitializeDatabaseConnection.

好的,这是有道理的.所以我在Global.asax中添加了以下行:

#2)
WebSecurity.InitializeDatabaseConnection(
    _connectionStringName,
    "UserProfiles",
    "Id",
    "UserName",
    autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud)

但比以下几行:

#3)
var dbMigrator = new DbMigrator(_configuration);
dbMigrator.Update();
Run Code Online (Sandbox Code Playgroud)

抛出错误:

数据库中已经有一个名为"UserProfiles"的对象.

嗯,这很有意义,因为迁移尝试创建刚刚由WebSecurity创建的表.

我找到了一个解决方法:我把#2放在了#1之上.比它工作.

  1. 迁移创建了UserProfiles表
  2. WebSecurity附加到现有的UserProfiles表并创建所需的其他表
  3. 种子在找到所需的表并初始化WebSecurity时起作用.

问题是我必须在种子方法中初始化WebSecurity,这有点臭.

我的问题是如何将WebSecurity.InitializeDatabaseConnection移回Global.asax?

.net c# entity-framework asp.net-mvc-4 ef-migrations

1
推荐指数
1
解决办法
2306
查看次数