2011-10-28 52 views
0

我正在構建一個asp.net web應用程序(框架4),並希望開發一個持有基本客戶信息(客戶ID,電子郵件,電話,地址信息,客戶賬戶等)的類是 可通過訪問網站頁面,以便我沒有商店客戶ID某些地方(會話等),並撥打數據庫,每當我需要關於該客戶的一些信息。
當用戶登錄門戶並獲取他/她的基本信息並以類的形式存儲時,我只想調用一次數據庫。asp.net客戶信息類

任何人都可以告訴如何開發這種類型的fo類,以及在哪裏/如何存儲它以使其適用於所有頁面?

+2

我認爲你誤解了類是如何工作的,特別是在持久性方面。主要的是,類是持久性 - 無知的。 HTTP協議本質上是無狀態的,所以一旦請求完成,你的類實例就會被銷燬。您需要在某個時刻使用Session(或其他持久性機制)來存儲您的客戶信息(即使它是一個類對象)。 –

+0

ASP.NET頁面是無狀態的。全球信息需要存儲在某個地方。如果您正確使用會話,會話使用不錯。如果您想最小化Session中的內容,只需存儲用戶的ID(或您擁有的任何唯一標識符),以及何時需要有關該客戶的信息,請從數據庫中獲取。 –

+0

我完全同意Brian的觀點,從你的問題看,你似乎缺少面向對象編程的工作原理。 – gideon

回答

0

一旦用戶成功登錄,向DB撥打一次電話即可檢索當前的Customer對象並將其保存到Session。不要以爲你會濫用服務器的內存。該對象將少於500個字節,並且如果您有1000個實時會話,則它只是不到500 KB的服務器內存。

您也可以考慮Cache鍵入User ID並檢索Customer對象。

您也可以將Customer對象保存到ViewState,並且這不會在服務器上佔用任何內存。

從任何頁面訪問Session \ Cache \ ViewState都非常容易。

對於Session

protected void Page_Load(object sender, EventArgs eventArgs) 
{ 
    Customer customer = Session["customer"] as Customer; 
} 

private void LoginSuccess(int customerID) { 
    Customer customer = _customerRepository.GetById(customerID); 
    Session["customer"] = customer; 
} 

**對於ViewState,它只是同Session - 只是ViewState取代Session

如果你想將其存儲在Cache然後用

HttpContext.Current.Cache.Insert("customer" + customerId, customer, new CacheDependency("customer" + customerId), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration); 

,您可以訪問這樣的Cache項目:

HttpContext.Current.Cache["customer" + customerID] 

希望這有助於!