簡體   English   中英

無法將類型為“System.Web.Security.SqlRoleProvider”的對象強制轉換為“WebMatrix.WebData.SimpleRoleProvider”

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

我開發了一個帶有Entity Frame的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 但是,您可以嘗試使用SimpleRoleProvider構造函數( RoleProvider

var roles = new SimpleRoleProvider(Roles.Provider);

我整理了這個。 問題顯然與網絡配置有關。 我在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM