2011-04-18 19 views
2

我剛開始學習ASP.NET MVC。我正在使用默認使用SqlMembershipProvider的標準項目模板創建項目。這已經在我的項目中自動創建了一個ASPNETDB.mdf數據庫來保存成員信息。如何將存儲在此數據庫中的成員與我的實際應用程序數據關聯?如何將我的應用程序數據關聯到ASP.NET MemberShipProvider中的用戶?

我應該在我的操作方法中使用this.User.Identity.Name簡單地引用當前用戶的名稱作爲存儲或從我的應用程序數據庫檢索用戶特定信息時的鍵?或者我應該使用this.User.Identity.UserId而不是?我總是認爲基於整數的ID查找速度快於字符串或GUID基礎ID。但是aspnet_Users表的主鍵是一個GUID字段。

this.userthis.HttpContext.User有什麼不同?從這些屬性返回的IPrincipal與從Membership.GetUser()返回的MembershipUser有什麼關係。這些有何區別?

此外,是否最好將會員信息保存在與應用程序數據庫不同的數據庫中?或者可以將它們合併到一個數據庫中嗎?

回答

1

有幾個元素,你的問題,有幾點:

我通常使用的標識名稱,因爲它是通常更有效地使用。 get user function從數據庫獲取完整的用戶數據並更新上次訪問時間。原理不需要這個,並在內存數據中使用。因此,用戶名屬性更快更容易獲得。主要的警告是,如果你可能允許用戶改變他們的用戶名,在這種情況下,ID會更有意義。

聽起來好像您正在考慮擁有大量與用戶相關的記錄。你說得對,整數是查找最快的。如果您有大量數據,那麼您可能想要將您的用戶映射到一個整數,或者由extending the membership提供程序或通過添加映射表。

至於這個.User vs HttpContext.User,沒什麼區別。

+0

不,這是我的第一個ASP.NET應用程序。所以我根本不會有很多用戶。我確定通過UserName或UserID查找它們會很好。我只是想了解它是如何工作的。謝謝! – 2011-04-18 21:02:06

1

默認模板應該在Models文件夾中爲您提供一個「AccountModel」,它爲一些formsauthentication/membership功能創建包裝。你可以擴展並添加一個函數來返回當前HttpContext中存儲的IPrincipal的當前「HttpContext.Current.User」。通過Name屬性,您可以通過用戶名查詢成員資格以獲取成員資格數據(IPrincipal只存儲諸如用戶名,角色等的基本信息,MembershipUser具有從數據庫中提取的所有其他數據)。

SqlMembershipProvider是非常糟糕的IMO和限制以外的小項目......並在同一時間waay複雜。我現在在一個擁有2000多個帳戶的網站上使用它,如果你想定製任何東西,它就是皮塔。它更好(網上有很多例子)只是寫你自己的使用formauthentication和擺脫會員的廢話。我現在有一個我希望我寫一個開始。

+1

盡我所能,我不同意。我已經使用會員提供商的非常高負荷的網站。如果您遇到少數用戶遇到問題,我會說您的服務器存在一些問題。會員提供商的重點在於幫助您不必像自己那樣做重複的任務,並完成第一部分開發。如果你想擴展它也很容易...... – Timbo 2011-04-18 20:37:25

+0

那麼在AccountModel.cs中默認創建的AccountMembershipService和FormsAuthenticationService類實際上只是將功能分別包裝在MembershipProvider和FormsAuthentication類中。所以我試圖瞭解幕後的真實情況。這是我的第一個ASP.NET項目,所以我不太關心SqlMembershipProvider的任何限制。 Http.Context.User會始終引用與MemberShip.GetUser()相同的用戶嗎? – 2011-04-18 20:46:35

0

在我使用過SqlMembershipProvider的應用程序中,我通常在與應用程序表相同的數據庫中存儲表/ sprocs,然後使用外鍵將我的應用程序錶鏈接到用戶表。有一次,我沒有這樣做,當一個用戶數據庫要在多個不同的應用程序之間共享時,每個應用程序都有自己的應用程序數據庫。

+0

我的擔心是,如果我開始創建與SqlMembershipProvider表的關係,我最終可能會破壞一些東西。設置Fk時,是否還設置了刪除或更新規則,以便在刪除用戶時刪除所有關聯的應用程序信息? – 2011-04-18 20:52:41

相關問題