无法将类型为“System.Web.Security.SqlRoleProvider”的对象转换为类型“WebMatrix.WebData.SimpleRoleProvider”

3

我正在使用Entity Framework开发一个MVC Web应用程序。我已经启用了数据库迁移,以便在每次更新时可以添加一些种子数据。 更具体地说,我想添加两个用户和两个角色;因此配置文件看起来像这样:

        var roles = (SimpleRoleProvider)Roles.Provider;
        var membership = (SimpleMembershipProvider)Membership.Provider;

        //// create two roles 
        if (!roles.RoleExists("Admin"))
        {
            roles.CreateRole("Admin");
        }
        if (!roles.RoleExists("User"))
        {
            roles.CreateRole("User");
        }

然而,在转换期间似乎出现了问题;它抛出了一个异常。

 Unable to cast object of type 'System.Web.Security.SqlRoleProvider' to type 'WebMatrix.WebData.SimpleRoleProvider'.

我怀疑这可能是一个配置问题,但我并不确定。有没有人遇到过同样的问题?

3个回答

5

它不再抛出那个异常了。然而,它没有将新角色存储到数据库中。 - ppoliani

4
我已经处理好了。问题显然与Web配置有关。我向web.config文件添加了以下行:
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
  </providers>
</roleManager>

为了明确设置角色提供程序。现在Roles.Provider返回WebMatrix.WebData.SimpleRoleProvider的实例; 因此我不再需要转换


1
我通过在web.config中添加以下代码解决了这个问题:

<roleManager enabled="true" defaultProvider="simple">
  <providers>
    <clear />
    <add name="simple" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
  </providers>
</roleManager>
<membership defaultProvider="simple">
  <providers>
    <clear />
    <add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
  </providers>
</membership>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接