16

我想在我的MVC 4第一次使用SimpleMembership,並且我已經有一個基於它創建的現有數據庫和EF5模型!我搜查了很多,但我無法找到如何在我的情況下使用它,並且還有我自己的模型下的一切。使用MVC 4 SimpleMembership與現有的數據庫優先EF模型

如果有人能給我一個想法如何做到這一點,這將是非常好的。

感謝

回答

3

在標籤的appSettings你的web.config,添加行

<add key="enableSimpleMembership" value="true"/> 

SimpleMembership是建立在這樣從這裏你只需要編寫

[InitializeSimpleMembership] 

以上的公共類AccountController:控制器

當你想f請求用戶登錄您在頁面控制器中編寫的某個頁面

[Authorize] 

該表格將在您的數據庫中自動生成。如果你想添加更多的字段到這些表中,你只需要簡單地谷歌它。

這裏是作爲一個參考點一個鏈接以獲取更多信息http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

16

純粹的,它可能是創建一個ASP.NET MVC 4 Web應用程序項目的新的互聯網應用程序模板(即通過文件是一個好主意>新項目)。

如果您查看AccountController,正如@ zms6445所述,它的裝飾屬性爲InitializeSimpleMembership。您可以在根目錄下的Filters文件夾的InitializeSimpleMembershipAttribute.cs文件中找到該屬性的實現。

在這裏,這是謎題的缺失部分 - 您需要掛鉤您的現有數據庫,以便它被SimpleMembershipProvider使用。這是代碼,您需要:

private class SimpleMembershipInitializer 
{ 
    public SimpleMembershipInitializer() 
    { 
     try 
     { 
      if (!WebSecurity.Initialized) 
      { 
       WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new InvalidOperationException("Something is wrong", ex); 
     } 
    } 
} 

需要注意以下幾點:

  1. CONNECTION_STRING_NAME是在你的web.config的ConnectionStrings條目 - 你不能在這裏使用的模型連接字符串 - 在SimpleMembershipProvider不認識到這種格式!您需要指定一個System.Data.SqlClient連接字符串,例如

    < add name =「CONNECTION_STRING_NAME」connectionString =「data source = SERVER; initial catalog = DATABASE; user id = USER; password = PASSWORD;」的providerName =「System.Data.SqlClient的」/>

  2. USER_TABLE是在你的數據庫中的表來保存額外的用戶信息,如名字,姓氏等,這是與通過USER_ID_FIELD自動生成的表。

  3. USER_ID_FIELD通常是Users表的主鍵。它必須是int

  4. USER_ID_NAME是用戶的唯一名稱,可以是電子郵件地址。

  5. autoCreateTables設置爲true確保SimpleMembership工作所需的表格在不存在的情況下創建。

當然,這個代碼只得到,如果你通過AccountController打一個頁面,因爲這已裝修由屬性解僱。你可以在那裏放置一個斷點,並看到它在行動。

這應該讓你開始 - 互聯網應用程序模板是一個很好的模板,如果你被困住了,

希望這會有所幫助。

+0

我按照你的指示,但我從LazyInitializer得到一個TargetInvocationException。有關它的任何想法? – 2013-05-05 15:15:06

+1

我發現它:) SQL服務器防火牆導致錯誤!我討厭防火牆:) – 2013-05-05 15:53:38

+2

@UmutCanKöseali我認爲我有同樣的問題,你如何關閉sql防火牆? – Cybercop 2013-05-30 09:47:27

相關問題