正在使用实体框架在Windows Azure中设置成员身份种子

本文关键字:设置 成员 身份 种子 Azure Windows 实体 框架 | 更新日期: 2023-09-27 17:49:24

我正在尝试使用ASP.NET MVC 4和实体框架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" });
        }
    }

使用包管理器控制台中的更新数据库,我可以看到正在调用Seed方法。我甚至使用实际的SQLAzure连接字符串运行了这个命令:

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上尝试时,"Admin"链接从未显示,但在本地运行良好。

有什么方法可以帮我解决问题吗?我这样做对吗?

正在使用实体框架在Windows Azure中设置成员身份种子

经过几天的故障排除和拔头发,我开始工作了。我通过在App_Start((中添加SeedMembership((中的检查来修复它。根据Interweb和Visual Studio的说法,Seed((函数是在部署时调用的,但这不是我所看到的。