2

MVC 4.0 プロジェクトでロールを機能させようとしています。エンティティ フレームワークの接続文字列を使用して、データベースのクエリと更新を行うことができます。

<add name="DataContext" 
     connectionString="metadata=res://*/Models.Model.csdl|res://*/Models.Model.ssdl|res://*/Models.Model.msl;
                       provider=System.Data.SqlClient;
                       provider connection string='data source=.\SQLEXPRESS;
                       initial catalog=Phase 2;
                       integrated security=True;
                       multipleactiveresultsets=True;
                       application name=EntityFramework'" 
     providerName="System.Data.EntityClient" />

これは素晴らしく機能します。問題は、ロール マネージャーをセットアップしようとすると、無効な接続文字列があると表示されることです。

<roleManager enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" 
         type="System.Web.Security.SqlRoleProvider" 
         connectionStringName="DataContext" 
         applicationName="/" />
  </providers>
</roleManager>

これによりエラーがスローされ、接続文字列が間違っていることがわかります。どうやら調査した後、プロバイダーには別の接続文字列を使用する必要があります。ただし、2 つの接続文字列を同じコンテキストに向ける方法がわかりません。

これが現在、コンテキストに名前を付けている方法です。

public DataContext()
        : base("name=DataContext")
        {
        }

名前を動的に設定する方法はありますか、それとも別の方法を探す必要がありますか。

4

1 に答える 1

4

役割プロバイダーは、EFではなく直接のまっすぐなADO.NET接続文字列を持っている必要があります。ADO.NETメンバーシップおよびロールプロバイダーシステムは、EntityFrameworkを使用してテーブルにアクセスしません。

したがって、次のようなものを使用します。

<connectionStrings>
   <add name="RoleProviderConnection" 
        connectionString="data source=.\SQLEXPRESS;initial catalog=Phase 2;integrated security=True;"
        providerName="System.Data.SqlClient" />

メンバーシッププロバイダーとロールプロバイダーには、そのストレートADO.NET接続文字列を使用します。

<roleManager enabled="true">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" 
         type="System.Web.Security.SqlRoleProvider" 
         connectionStringName="RoleProviderConnection" 
         applicationName="/" />
  </providers>
</roleManager>
于 2013-03-10T20:47:13.607 に答える