2013-05-30 51 views
1

我想抓住mvc4,我剛剛創建了一個新的使用asp.net mvc4的Internet Application。我想知道如何在asp.net mvc4中生成SimpleMemberShipProvider。他們在名爲SimpleMembershipInitializerFilter文件夾中添加了一個新類,但我不知道如何使用該類生成表。如何生成我的數據庫中的會員供應商表

在此先感謝。

+0

我編輯了我的答案以提供一些額外的背景。如果您在MVC4中使用Internet應用程序模板,那麼它會在第一次運行它時在您的App_Data文件夾中創建一個localdb數據庫,因此您不需要創建自己的數據庫 - 整個過程都將爲您完成。 –

+0

@AndyBrown是的,你是對的,它創建一個defaultconnection.mdf文件,但是當我查看該數據庫時,只有一個表名'UserProfile',並且只有兩個字段名爲UserId,UserName',其餘部分的會員表? – Ancient

+0

您是否註冊了新用戶? –

回答

3

如果您創建了數據庫,並將連接字符串設置爲web.config,那麼當您第一次訪問Account/Login時,它將爲您生成表格。請注意,並非所有的表會產生,直到你第一次通過「註冊」創建一個用戶,那麼你也將看到表開始webpages_

編輯如果您使用的是互聯網應用模板MVC4那麼它默認模板將在App_Data文件夾中設置一個localdb。這將在您第一次運行應用程序並調用數據庫時創建。 (結束編輯)

查看我的回答here to "How do I use my own database with SimpleMembership and WebSecurity? What is MVC4 security all about?"以獲得SimpleMembership的概述以及它是如何融合在一起的。

請注意,如果你不叫Account/Login,則數據庫將無法初始化,因此在某些情況下,你需要自己初始化它,你可以在使用的global.asax.cs以下行的Application_Start,或請參閱我的回答here to "ASP.NET MVC 4, The 「WebSecurity.InitializeDatabaseConnection」 method can be called only once"瞭解更全面的情況。

if (!WebSecurity.Initialized) 
{ 
    WebSecurity.InitializeDatabaseConnection("myConnectionStringName", "Users", "UserId", "Email", autoCreateTables: true); 
} 

或者,也可以作爲一個global filter,這將具有與使用的global.asax.cs上面的代碼相同的效果寄存器InitializeSimpleMembership

InitializeSimpleMembership只是爲您執行上述代碼行,但因爲它只是在提供的模板中裝飾AccountController,所以只有在訪問該控制器上的某個操作時纔會執行該操作。這是我們大多數人第一次絆倒的地方。 MVC Internet應用程序模板僅提供了使用它的示例方式。您需要實際確保它在整個站點中使用,以便擁有生產準備系統。


腳註:

既然你已經使用SimpleMembership它是值得了解的直線距離,它最適合在code-first scenario,並且它是最容易立即把用戶配置模型類到開始您自己的DbContext,您正在使用代碼中的所有其他模型;這會在稍後爲您預防很多問題。我會離開你單獨提出更多的問題,因爲它有點偏離主題。

請注意,您可以爲您的DbContext和SimpleMembership使用相同的連接字符串名稱(默認情況下,這在Visual Studio項目模板中稱爲「DefaultConnection」)。

0

1)如果你在web.config中提供了一個默認連接字符串,成員資格會在第一次登錄時創建數據庫automacaly!

2)如果您不提供任何連接,應用程序將在machine.config中查找默認連接,以在SQL實例或映射到其中的其他位置創建數據庫。

3)如果你需要創建一個自定義的MembershipProvider看看這裏:SimpleMembership, Membership Providers,

希望這可以幫助您!