我一直在努力让角色参与我的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")
{
}
有没有办法动态设置名称,或者我应该寻找另一种方法来执行此操作。
答案 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>