8

私はASP.NET MVC Webサイトを作成しています。ASP.NET MVCとSqlMembershipProviderを使用して追加のユーザーの詳細はどこに保存しますか?

非常に複雑なユーザー登録ページがあり、多くのフィールドがあります。私の質問は、どこでこれを維持すべきか?メンバーシップ・プロバイダ・ツールで作成されたユーザー表にはこれらの列が含まれていないため、各ユーザーに関するこの追加情報を格納するという点でベストプラクティスとは何か混乱しています。

これは、プロファイルプロバイダが出場する場所ですか?どのように機能するのですか?そうでない場合は、MembershipProviderテーブルの株価欄に表示されていない追加のユーザーの詳細を保持して保存するにはどうすればよいですか? CODE Magazineから

誰でもなど、すべての情報を使用して新しいユーザーを作成する方法を、私はそれらを必要なときにこれらの追加、ユーザーの詳細にアクセスする方法を、これが処理される方法についていくつかのリソースに私を指す

答えて

1

このarticleを助けました私はこの問題を抱えています。

3

これは、ASP.NETプロファイルプロバイダが提供される場所です。このプロファイルを使用して、ユーザーに関する任意のプロファイル情報を格納できます。必要なフィールドは、web.configファイルMSDN Link on how to configure the profile fields in web.config fileに追加するだけです。記事をまとめるには、保存する名前とタイプ値をプロファイル要素のプロパティノードに追加するだけです。

ASP.NET Webフォームでは、Visual Studioは、カスタムプロファイルプロパティを参照する強力な型指定のプロファイルクラスを自動的に作成します。 MVCでは、これは起こりません。ユーザーのプロファイル情報を参照するには、HttpContext.Profile ["PropertyName"]を呼び出します。例:

HttpContext.Profile["Name"] = name; 
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip; 

編集:アンディが述べたように、あなたがこれらのプロパティに対するクエリを実行する場合、デフォルトのSqlProfileProviderを使用することは本当に良いではありません。彼は完全に正しく、おそらく私はもともとこの制限に注意していたはずです。この制限は、SqlProfileProviderがすべてのプロファイルデータをPropertyNamesとPropertyValuesString/PropertyValuesBinaryの3つの列に格納するために発生します。すべてのキーはPropertyNamesフィールドに格納され、文字列として格納できる値はPropertyValuesStringフィールドなどに格納されます。これは、「Select * from aspnet_Profile where Age> 10」のようなクエリを実行することは非常に難しいことを意味します。

3

実際にはベストプラクティスがあるとは確信していません。本当に情報をどのように使いたいかによって決まります。

まず、メンバーシップを認識する必要があり、プロファイルは2つの別個のものです。 ASP.NETメンバーシップ、プロファイル、および役割の機能は、複数のサイト/アプリケーションにサービスを提供するように設計されています。

これらの関係のスキーマを見ると、ユーザーはシステム固有のものですが、アプリケーション間でユーザーを共有できます。つまり、プロファイル情報もアプリケーション間で共有されます。メンバーシップは実際にはユーザーとアプリケーションの関連付けであり、その特定のアプリケーション(パスワード、パスワードQ & Aなど)との関係に関する情報が含まれています。

Ryanが示唆しているようにプロファイルプロバイダを使用できますが、1)プロファイルメトリックを収集する必要がある場合は情報を簡単にクエリできず、2)メンバーシップ/プロファイルサービスのすべてのコンシューマで共有されます。ただし、ニーズに合わせて拡張することもできます。

Gortokが示唆しているように、メンバーシッププロバイダを拡張することができます。その情報はアプリケーションに関連していますが、既存のストアドプロシージャまたはテーブルを変更することによって、インタフェースまたはインテントを変更します。

もう1つの選択肢は、asp.net SQLプロバイダのユーザーIDを使用して、独自のプロファイル実装を参照して、サービスとして扱い、この情報を自分で追跡することです。

Rollaの4人でMembership, Profiles, and Rolesには良いシリーズがあります。私は読書をお勧めします。そして、すべての可動部品に精通したら、最良の場所を教えてください。あなたが作成しようとしているプロファイル情報をどのように構造化するのが最善かを示します。

2

この投稿は長い間投稿されており、疑問文脈はおそらくmvc2以前のものでした。

これはmvc3になりました。おそらくmvc5のコンテキストに対する回答を求めている他の人がこのソリューションに興味を持っている可能性があります。あなたは

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
public class ApplicationUser : IdentityUser 
{ 
} 

は、単にこれに複数のプロパティに追加{プロジェクト} /Models/IdentityModel.csで使用するため、次のコードブロックの準備ができています 有効に個々のユーザアカウントを持っている標準mvc5プロジェクトで

クラスに格納され、プロパティはデータベースに永続化されます 例:

public class ApplicationUser : IdentityUser 
{ 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
     public bool Active { get; set; } 
     public DateTime DateRegistered { get; set; } 
}