实体框架连接字符串对角色提供程序无效?

时间:2013-03-10 20:42:09

标签: asp.net asp.net-mvc asp.net-membership

我一直在努力让角色参与我的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>

这会抛出一个错误并告诉我我的连接字符串是错误的。经过研究显然我必须为我的提供者使用单独的连接字符串。我不知道如何将两个连接字符串指向同一个上下文。

这就是我目前的Context被命名的方式。

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

有没有办法动态设置名称,或者我应该寻找另一种方法来执行此操作。

1 个答案:

答案 0 :(得分:4)

角色提供程序需要具有直接,直接的ADO.NET连接字符串 - 而不是EF连接字符串; ADO.NET成员资格和角色提供程序系统不使用Entity Framework来访问其表。

所以使用这样的东西:

<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>