3

ASP.NET MVC4とEntityFramework5を使用してSQLAzureデータベースでメンバーシップロールを作成しようとしています。これをローカルホストで正常に機能させることはできますが、アカウントも作成されないようです。 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メソッドが呼び出されていることがわかります。実際の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を試してみると、[管理者]リンクは表示されませんが、ローカルでは問題なく機能します。

何が起こっているのかをトラブルシューティングする方法はありますか?私もこれを正しく試していますか?

4

1 に答える 1

2

トラブルシューティングと髪の毛を抜く数日後、私はこれを機能させました。App_Start()にSeedMembership()からのチェックを追加することで修正しました。InterwebとVisualStudioによると、展開時にSeed()関数が呼び出されますが、これは私が見たものではありません。

于 2012-12-26T12:14:28.870 に答える