0

さて、SimpleMembership をセットアップしWebSecurity.InitializeDatabaseConnection(...)ましたが、データベースをセットアップするために 1 回だけ実行する必要があるという印象を受けました。その後、ユーザー ID を検索しようとすると、WebSecurity を呼び出す前にデータベースを初期化する必要があることを示すエラーが表示されます。わかりました...それで、初期化呼び出しを _ViewStart.cshtml に戻しました。今、もう一度実行すると、エラーが発生しますThe "WebSecurity.InitializeDatabaseConnection" method can be called only once.

誰かが私にこれを説明できますか?

4

2 に答える 2

1

以下のように、DatabaseConfig クラスWebSecurity.InitializeDatabaseConnection(...)の DatabaseInit メソッドに配置する必要があります。App_Start\DatabaseConfig.cs

    public static void DatabaseInit(string ConnectionName = "DefaultConnection", string userTable = "UserProfile", string userIdColumn = "UserId", string userNameColumn = "UserName", bool autoCreateTable = true)
    {
        WebSecurity.InitializeDatabaseConnection(ConnectionName, userTable, userIdColumn, userNameColumn, autoCreateTables: autoCreateTable);
    }

お役に立てれば :)

于 2013-07-27T09:22:39.470 に答える
1

はい、実際には非常に簡単です。通常初期化を行っている場所の前に、単純なメンバーシップを必要とするコードを使用しています。したがって、エラーメッセージが表示され、初期化を行うための呼び出しを追加すると、新しいコードが機能するようになりました..しかし、古いコードに到達し、データベースを再度初期化してエラーをスローします.

問題は基本的に、パイプラインの早い段階でデータにアクセスしようとしていることにあります。初期化は、アプリ ドメインが作成されるたびに 1 回実行する必要があります (つまり、アプリが最初に起動されたとき、または非アクティブのために IIS によってシャットダウンされたアプリが再起動された後)。

これが、WebSecurity.Initialized への呼び出しでラップする必要がある理由です。

于 2013-07-27T05:39:35.027 に答える