aspnet_regsql.exe を使用して、ロール、ユーザー、およびメンバーシップを管理するための一連の ASPNET データベース テーブルを既存の SQL データベースに追加しました。
既存のデータベースには、多数のユーザーの情報 (ID、名前、住所、郵便番号など) を含むユーザー テーブルが既に存在します。新しいaspnet_Usersテーブルを既存のユーザーテーブルに関連付けるために達成したいこと。
おすすめのオプションやオプションはありますか?ありがとう
乾杯、アレックス
aspnet_regsql.exe を使用して、ロール、ユーザー、およびメンバーシップを管理するための一連の ASPNET データベース テーブルを既存の SQL データベースに追加しました。
既存のデータベースには、多数のユーザーの情報 (ID、名前、住所、郵便番号など) を含むユーザー テーブルが既に存在します。新しいaspnet_Usersテーブルを既存のユーザーテーブルに関連付けるために達成したいこと。
おすすめのオプションやオプションはありますか?ありがとう
乾杯、アレックス
ASPnetメンバーシップテーブルでUserIdと呼ばれるUserKeyは、ユーザーを識別するGUIDです。UserKey
テーブルに列を追加してから、Users
次のような危険なことを開始できます。
select *
from Users as U inner join
aspnet_Users as aU on aU.UserId = U.UserKey inner join
aspnet_Membership as aM on aM.UserId = aU.UserId
where U.UserId = @UserId
明示または黙示を問わず、Microsoft(または私)のテーブルを直接いじりたい場合、保証は提供されません。
数年前に私が取り組んだプロジェクトでも同様の状況がありました。最終的に行ったことは、関連するユーザー レコードの主キーを外部ユーザー テーブルからASPNET メンバーシップ モデルのプロファイル プロパティとして格納することでした。
利点は、リレーションシップを作成するために外部データベースのスキーマを変更する必要がなく、組み込みの ASPNET メンバーシップ プロファイル オブジェクトを使用して、Web コード ビハインド内から関連するキーを簡単に取得できることです。
このプロファイル プロパティの初期設定は、ASPNET メンバーシップ プロファイル オブジェクトを使用するタスク専用に作成したユーティリティを介して行われ、メンバーシップのセットアップと外部テーブルの両方にユーザーの電子メール アドレスが保存され、それがキーになっているという事実によって簡単になりました。 1回限りのタスク。
このアプローチの欠点は、ASPNET メンバーシップ プロファイル テーブルがほとんど非正規化されていない (または実際に正規化されていない) ことです。プロファイル プロパティを xml データまたはシリアル化されたバイナリとして格納します。古いバージョンでは、すべての値を含む単一の値文字列の名前と文字位置として保存されたプロパティ名でシリアル化されていました。これにより、外部テーブルの観点からクエリや結合などを作成することが (非現実的ではないにしても) 困難になります。
私たちにとって、これは大したことではありませんでした。なぜなら、私たちは Web サイトからケースバイケースで外部ユーザー データを扱っていたからです。そのため、構築されたオブジェクトを使用して ASPNET プロファイルからキーを取得し、外部データベースで検索するのは簡単でした。
プロジェクトで多くのリレーショナル クエリまたはバッチ プロセスを実行する場合、代わりに ASPNET UserId GUID を外部ユーザー テーブルに外部キーとして格納することをお勧めします。または、それらを使用してメールを一意にする場合。