A1. インターネット テンプレートは、web.config に次のようなエントリを作成する必要があります。
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
<providers>
<clear/>
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
<providers>
<clear/>
<add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
</providers>
</membership>
これにより、SimpleMembership で使用されるロール プロバイダーとメンバーシップ プロバイダーが構成されます。VS 2012 を搭載したマシンで MVC4 のインターネット テンプレートを作成すると、それらは常に存在します。Views ディレクトリではなく、アプリケーションのルート ディレクトリにある web.config を見ていることを確認してください。この情報は、ルート web.config にある必要があります。そこにない場合は、SimpleMembership が正しく機能するように追加する必要があります。
A2. A1 に示すように、web.config に情報を入れると、他のプロバイダーはオーバーライドされます。最初に clear 要素を使用して、以前に定義されたプロバイダーをクリアすることに注意してください。
A3. InitializeSimpleMembershipAttributeはAccountControllerに装飾され 、SimpleMembership の遅延初期化を実行します。AccountController アクションにアクセスしようとした場合にのみ呼び出されます。たとえば、ユーザーがログインするとすぐに、データベースが初期化されます。この初期化方法は、フォーム認証が使用されていない場合でも、インターネット テンプレートで作成されたアプリケーションが機能するように行われました。私はこの初期化方法が好きではなく、フォーム認証を行う場合は Global.asax Application_Start メソッドで行うことを好みます。この初期化を使用するようにアプリを変更する方法については、この記事を参照してください。
WebSecurity.InitializeDatabaseConnectionを複数回呼び出すと、例外がスローされます。WebSecurity.Initializedをチェックする if ステートメントでラップすることを常にお勧めします。