私はMVC4アプリケーションを開発しています。メンバーシップ認証とプロファイルモジュールに取り組んでいますが、少し混乱しています。
舞台裏で2セットの承認/プロファイルモジュールが機能しているように見えるので、私は混乱しています。
短縮版
承認用のテーブルは2セットあります。1つは新しいMVC4インターネットアプリケーションを作成するときに作成され、もう1つはaspnet_regsqlを実行するときに作成されます。データは、紛らわしい方法で2つのセットから保存および処理されます。
2つのセットはどのように関連していますか:何がどこに保存されますか?ユーザーが2つのセットで作成されるのはなぜですか?等
ロングバージョン
セット1
新しいMVC4インターネットプロジェクトを作成しました。これは、ユーザーを登録してロールを作成する機能を使用して生成されました。自動的に生成されたデータベースには、Users、Roles、UserInRoles、Memebership、Profilesのテーブルが含まれていました。ストアドプロシージャはありませんでした。承認は正常に機能しました。ユーザーデータとロールは、Users、Roles、およびUserInRolesテーブルに正しく保存されました。
セット2
次に、サイトユーザーのtpaddProfileに移動しました。私はジョエルの答えに従いました。コードを実行するときは、次の行をヒットします。AccountProfile.CurrentUser.FullName = "Snoopy"; このエラーが発生しました:
ストアドプロシージャ'dbo.aspnet_CheckSchemaVersion'が見つかりませんでした。
以前に作成したデータベースに対してaspnet_regsqlを実行すると、予想されるaspnet_テーブルとストアドプロシージャのセットが作成されました。コードを再度テストしました。今回は正常に機能し、プロファイルプロパティはaspnet_Profileテーブルに正常に保存されました(これは予想されることです)。
次のステップでは、新しいユーザーを作成しました。ユーザーは、Usersテーブルとaspnet_Usersテーブルの両方で作成されました(異なるUserId値を使用)-ここで画像1を参照してください
プロパティFullName=Snoopyを彼のプロファイルに追加しました。
Membership.GetUser()。ProviderUserKeyを実行すると、テーブルUsersからUserIdが返されます。AccountProfile.CurrentUser.FullNameを実行すると、「スヌーピー」が返されます。こちらの写真2をご覧ください。
これは非常に驚くべきことです。これは、システムがテーブルUsersのレコードをテーブルaspnet_Profileのレコード(UserIdフィールドがテーブルaspnet_usersのレコード)に関連付ける方法を何らかの形で知っていることを意味します。ところで、私はテーブルプロファイルが空であることを確認したので、そこから値が取得されませんでした。
では、ここで何が起こっているのでしょうか。この動作は予想される動作ですか?または、MVC 4アプリケーションにプロファイルを実装する他の(より良い?)方法があるという意味で、Joleの答えは間違っていますか?私がしたことは、作業にレンチを投げることです?