Sql server 无法强制转换类型为';System.Web.Security.SqlRoleProvider';输入';WebMatrix.WebData.SimpleRoleProvider';

Sql server 无法强制转换类型为';System.Web.Security.SqlRoleProvider';输入';WebMatrix.WebData.SimpleRoleProvider';,sql-server,asp.net-mvc,entity-framework,Sql Server,Asp.net Mvc,Entity Framework,我正在开发一个带有实体框架的mvc web应用程序。我已经启用了数据库迁移,以便可以在每次更新时添加一些种子数据。 更具体地说,我想添加两个用户和两个角色;因此,配置文件如下所示: var roles = (SimpleRoleProvider)Roles.Provider; var membership = (SimpleMembershipProvider)Membership.Provider; //// create two roles

我正在开发一个带有实体框架的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'.

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

这是因为
SqlRoleProvider
没有继承
SimpleRoleProvider
。但是,您可以尝试使用:


我解决了这个问题。问题显然与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的一个实例;因此,我不需要再强制转换了

我通过将下面的代码放在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>

它不再抛出该异常。但是,它不会将新角色存储到数据库中。
<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>