メンバーシップとロールの既定では、ASP.netインフラストラクチャは、デフォルトのメンバーシップと役割のプロバイダーを使用して、そのメンバーシップと役割のデータを別のデータベースに格納します。アプリケーションを実行し、ログインページからユーザーを登録すると、作成された「App_Data」フォルダーの場所にデータベースが表示されます。データベースが異なるため、接続文字列が異なります。エンティティフレームワークを使用しているため、ここから2つの方法があります。
1)接続文字列を変更し、同じデフォルトのasp.netメンバーシップおよびロールプロバイダーを使用して、エンティティフレームワーク構成が使用しているデータベースにデータを格納します。これは、デフォルトのメンバーシッププロバイダーとロールプロバイダーが、EF構成が指すデータベースを使用することを意味します。
2)EFを使用して、メンバーシップとロールのデータを管理します。したがって、ユーザーとグループはDBcontext
、他のエンティティとして管理されるエンティティになります。
私は最近、2番目のアプローチを実装しました。ASP.netメンバーシップは、独自のプロバイダーを実装し、それらをweb.configファイルに登録するためのフック(拡張性)を提供します。次に、User and Roleエンティティを作成し、それらをに含めますDBContext
。もちろん、プロバイダーを登録する前に、クラスから派生しMembershipProvider
てRoleProvider
抽象クラスを作成することにより、プロバイダーを実装する必要があります。これらのクラスは`System.Web.Security'名前空間にあります。
詳細については、このプロジェクトをフォローできますhttp://codefirstmembership.codeplex.com/
別のデータベースへの接続はパフォーマンスに影響を与えないと思います。Webモデルの場合と同様に、着信要求に同じデータベースを使用する場合でも、データベースに個別に接続する必要があり、着信要求は同時に発生する可能性があります。実際、データベースを分離しておくと、別のサーバーへのデータベースのロードが必要になります。しかし、今ではバックアップと保守を行うサーバーが2台あります。他のアプリケーションでも共有されるなどの理由でメンバーシップデータを分離する必要がない限り、これは維持できません。