2013-03-10 66 views
2

我一直在試圖讓我的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> 

這將引發錯誤,並告訴我,我的連接字符串是錯誤的。經過研究顯然,我必須爲我的提供者使用單獨的連接字符串。我不知道如何將兩個連接字符串指向相同的上下文。

這是我目前如何命名我的上下文。

public DataContext() 
     : base("name=DataContext") 
     { 
     } 

有沒有一種方法來設置的名稱動態或我應該尋找另一種方式來做到這一點。

回答

4

角色提供者需要有一個直接的,直接的ADO.NET連接字符串 - 不是EF的; ADO.NET成員資格和角色提供程序系統不使用實體框架來訪問其表。

因此,使用這樣的事情:

<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> 
+0

感謝您的快速回復。我試過這個,並且在「無效模式」的某處出現錯誤。我剛剛有工作,但當我回家時我可以給你具體細節。 – Jeff 2013-03-10 21:01:31

+0

如果我有我自己的角色表,我可以創建一個自定義角色提供者來使用實體框架嗎? – Jeff 2013-03-10 21:42:06

相關問題