3

我使用实体框架开发了一个 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'.

我怀疑这可能是配置问题,但我不太确定。有没有人偶然发现同样的问题?

4

3 回答 3

5

那是因为SqlRoleProvider不继承SimpleRoleProvider. 但是,您可以尝试使用SimpleRoleProviderConstructor ( RoleProvider)

var roles = new SimpleRoleProvider(Roles.Provider);
于 2013-08-09T09:18:22.260 回答
4

我整理了这个。该问题显然与网络配置有关。我在 web.config 文件中添加了以下几行:

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

显式设置角色提供者。所以现在Roles.Provider返回一个 WebMatrix.WebData.SimpleRoleProvider 的实例;因此我不再需要投射

于 2013-08-09T11:04:42.077 回答
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>
于 2015-09-22T14:33:07.590 回答