3

我正在尝试使用 ASP.NET MVC 4 和 Entity Framework 5 在我的 SQL Azure 数据库中创建成员角色。我可以让它在我的本地主机上正常工作,但它似乎没有创建帐户,也没有Azure 上的成员角色。请注意,我也在使用 Fluent NHibernate,但我相信这无关紧要。

在我的 Application_Start() 函数中,我初始化数据库以确保所有表都存在:

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

我还创建了一个 SeedMembership() 函数(由 Migrations\Configuration.cs 中的 Seed() 函数调用),如下所示:

private void SeedMembership()
    {
        WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);

        var roles = (SimpleRoleProvider)Roles.Provider;
        var membership = (SimpleMembershipProvider)Membership.Provider;

        if (!roles.RoleExists("Administrator"))
        {
            roles.CreateRole("Administrator");
        }
        if (membership.GetUser("TestAccount", false) == null)
        {
            membership.CreateUserAndAccount("TestAccount", "testpwd");
        }
        if (!roles.GetRolesForUser("TestAccount").Contains("Administrator"))
        {
            roles.AddUsersToRoles(new[] { "TestAccount" }, new[] { "Administrator" });
        }
    }

在包管理器控制台中使用 update-database 我可以看到正在调用 Seed 方法。我什至使用实际的 SQL Azure 连接字符串运行了这个命令:

PM> Update-Database -StartUpProjectName "MyProject" -ConnectionString "Data Source=tcp:myDB.database.windows.net,1433;Initial Catalog=myDB;User Id=myUser@myDB;Password=myPwd" -ConnectionProviderName "System.Data.SqlClient"
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying code-based migrations: [201212251057032_Initial].
Applying code-based migration: 201212251057032_Initial.
Running Seed method.
PM> 

但即使这样,我的“管理员”帐户也没有创建。我知道是因为我在我的视图中添加了一个检查:

@if(User.IsInRole("Administrator"))
{
    <li>@Html.ActionLink("Admin", "Index", "Admin")</li>
}

在 Azure 上尝试时,“管理员”链接永远不会出现,但在本地工作得很好。

有没有办法让我解决正在发生的事情?我是否正确地尝试了这个?

4

1 回答 1

2

经过几天的故障排除和拉扯,我得到了这个工作。我通过在 App_Start() 中添加来自 SeedMembership() 的检查来修复它。根据 Interweb 和 Visual Studio,在部署时会调用 Seed() 函数,但这不是我所看到的。

于 2012-12-26T12:14:28.870 回答