2009-05-19 5 views
1


何かが本当に役割とメンバーシップ・テーブルは

は、私は、ユーザーを作成して、などの役割に割り当てる方法を知っている関係を確立する方法について混乱が、私は役割やメンバーシップのテーブルができますどのように深くビットを掘るしようとしたとき、互いの間の関係を確立するために、私は(ところで - 私は、キーがどのように動作するかの外国/主を知っています;)完全に失われてしまった)

をところで - 私はaspnet_sqlregウィザード


を使用してデータベース内のテーブルを作成しました

Q1 - SqlRolesProviderSqlMemebershipProvider両方がプロパティのApplicationNameを有します。私は、2つのプロバイダーがユーザーと役割の関連付けを作成できるようにするには、両方ともApplicationNameプロパティに同じ値を使用する必要があると考えました。しかし、それはそうではないようです。

A)とにかく、私はSqlRolesProvider.ApplicationNameプロパティが異なるだけ役割プロバイダーに属するテーブルエントリを区別するために使用されているが、彼らは唯一で、メンバーシッププロバイダーとその役割を関連付けるためにそのプロパティを使用していないことを前提としてい同じアプリケーション名値?

B)しかし、ロールプロバイダが同じApplicationNameの値(したがって、SqlRolesProvider.ApplicationName == SqlMemebershipProvider.ApplicationName)のメンバーシッププロバイダとしか関連付けることはできません。



Q2 - 私はまた、ロールプロバイダがDB1に接続された場合、メンバシッププロバイダがDB2に接続している間にロールと、ユーザーは、関連することができるかどうか骨董ました。どういうわけか、ロールが別のデータベースで定義されていても、ユーザーをさまざまなロールに割り当てることができました。


A)しかし、なぜそれは何ですか?すなわち、SqlRolesProvider.ApplicationName =「rolesP」(= 10アプリケーションID)とSqlMembershipProvider.ApplicationName =「会員」(= 100アプリケーションID)は、次いで、DB1のテーブルために関係を持っている場合DB2のテーブルと、両者は一次/外部キーとして作用する(実際にアプリケーションIDを介して)のApplicationNameエントリを介して相互に参照しなければなりません。

しかし、事はDB1のテーブルの外部キーフィールドのいずれもSqlMembershipProviderに等しい値を保持していない、です。ApplicationID = 100となり、テーブル間に関係が確立されていないことが示唆されます。DB1(私はユーザーがロールに割り当てられているので、そうではないことがわかります)それで私は何が欠けているのですか?


ありがとう


EDIT:誰もが、まだこれを読んする場合は

ええとが、わかりませんが、私はいくつかのより多くの掘りやったとさえなりましたもっと混乱している:

両方の役割(のapplicationName = R1アプリケーションID = 10)及びメンバシッププロバイダ()のapplicationName = M1有するとアプリケーションID = 100と同じDBで、新しいユーザを作成するaspnet_Usersテーブル二つのために2つのエントリを作成する原因となっています同じユーザー名 - 一方はApplicationID = 10で、その他はApplicationID = 100です。私が知る限り、新しいユーザーが作成されると、aspnet_Usersに1つのフィールド(ApplicationID = 100)を追加する必要があります。え?

+1

ここにデータベースのスキーマがあります:http://webthinker.wordpress.com/2007/11/21/aspnet-membership-schema/ – Greg

答えて

2

aspnet_UsersInRolesテーブルを確認しましたか。これは、ユーザーをロールにリンクさせるテーブルです。 RoleProviderはMembershipProviderとは別に設計されているため、別々のDBに格納することができます。さらに、1つのアプリケーション名に対して役割を設定し、それらの役割を2つの別々のアプリケーション(メンバーシップ・プロバイダーのアプリケーション名がそれぞれ異なる)で再利用することもできます。両方のプロバイダに同じアプリケーション名を持たなければならない、またはアプリケーション名が実行中のアプリケーションと一致する必要があるという心理に悩まされないでください。あなたがしたくない場合は、名前をつける必要はありません。これが役立つことを願っています。

+0

あなたの助けに感謝 – SourceC

1

私はあなたが

はとにかく...あなたはあまりにも多くのデータベースを見ているようだ...と言っていたもの、以下の苦労していました。メンバーシッププロバイダのweb.configを設定しましたが、C#およびNOT SQLクエリを使用して「メンバシップ」をクエリできましたか?

+0

申し訳ありませんが、私は本当にそれをより良く語る方法を知らなかったのです。とにかく、はい、私はC#を使用してメンバーシップと役割を照会することができました – SourceC