2

私は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の答えは間違っていますか?私がしたことは、作業にレンチを投げることです?

4

1 に答える 1

4

おそらくどちらか一方を使用する必要があります。決定に役立つ最近の投稿は次のとおりです 。 -5-web-forms-and-asp-net-mvc-4-templates.aspx

于 2012-09-13T08:35:14.893 に答える