Asp.net-Mvc-4

SimpleMembershipInitializer 不會初始化

  • August 3, 2014

我正在努力在我的 EntityFramework / MVC4 / DatabaseFirst 項目中獲得一個簡單的成員資格方案。我發現了很多首先使用程式碼的範例,但沒有先使用 DB。

我遇到的問題是 InitializeDatabaseConnection 拋出錯誤(“無法找到請求的 .Net Framework 數據提供程序。它可能未安裝。”)程式碼如下所示:

WebSecurity.InitializeDatabaseConnection("DALEntities", "tblContacts1", "ContactID", "EMail", autoCreateTables: true);

我不確定什麼 DataProvider 失敗了。如果我嘗試跟踪“進入” InitializeDatabaseConnection 呼叫,它會立即引發錯誤。

我錯過了什麼?

資訊:

DALEntities 是其餘 EF 使用的 connectionString 的名稱。下面的程式碼工作得很好……

   public ActionResult Test() {
       using (var db = new DALEntities()) {
           var query = from i in db.TBLINVENTORies
                           orderby i.ITEMNAME
                           select i;
           var cnt = query.Count();
           string str = "Total Inventory: " + cnt;
           return Content(str);
       }
   }

我來自 web.config 的連接字元串部分:

 <connectionStrings>
   <add name="DALEntities" connectionString="metadata=res://*/DAL.DAL.csdl|res://*/DAL.DAL.ssdl|res://*/DAL.DAL.msl;provider=System.Data.SqlClient;provider connection string="data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
 </connectionStrings>

這篇文章似乎在問同樣的問題(但在模型優先的背景下),但還沒有解決方案:Using SimpleMembership with EF model-first

另外,我看到WebSecurity.InitializeDatabaseConnection()幫助文本有一個重載:Initializes the membership system ((blah blah <snip> ProviderName: the name of the ADO.NET data provider. If you want to use Microsoft SQL Server, the WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String, String, String, String, Boolean) overload is recommended. 我確實希望連接到 MSSQL 伺服器……這需要嗎?

給您帶來麻煩的提供程序是您的連接字元串中指定的一個,即 System.Data.EntityClient。我懷疑問題是因為您的項目是數據庫優先的,而簡單的成員資格是使用程式碼優先的。我認為您不能將這些方法混合在一個數據庫中。嘗試將其放回 DefaultConnection 用於 IntializeDatabaseConnection 的位置。MVC4 腳手架生成的 web.config 中應該有一個 DefaultConnection。此連接字元串通常使用 System.Data.SqlClient 作為提供程序。

如果您想在用於儲存域資訊(即 DALEntities)的數據庫中保留簡單的成員資格,那麼您需要將在域上使用 EF 的方法更改為程式碼優先。如果您想首先保留項目數據庫,您需要在數據庫中設計自己的成員模式並開發自定義成員和角色提供程序。如果您真的想將使用者資訊集成到您的域模型中,這可能是最好的方法。

引用自:https://stackoverflow.com/questions/12902685