2011-10-28 14 views
0

私はasp.net Webアプリケーション(フレームワーク4)を構築しており、基本的な顧客情報(顧客ID、電子メール、電話番号、アドレス情報、顧客アカウントなど)を保持するクラスを開発したいと考えました。 ウェブサイトのページにアクセスすることができますので、私は顧客のIDをどこに保存していないのですか(セッションなど)、その顧客に関する情報が必要なときはいつでもDBを呼び出してください。
ユーザーがポータルにログインして基本情報を取得してクラスの形式で保存するときに、DBを一度呼び出すことが必要でした。asp.net顧客情報クラス

このようなタイプのクラスをどのように開発するか、どのページをどのように保存してすべてのページを利用できるかを教えてください。

+2

私はクラスの仕組み、特に持続性について誤解していると思います。主に、クラスは永続性を知らない。 HTTPプロトコルはその性質上ステートレスなので、要求が完了するとクラスインスタンスは破棄されます。顧客情報を(クラスオブジェクトであっても)保存するには、ある時点でSession(またはその他の永続化メカニズム)を使用する必要があります。 –

+0

ASP.NETページはステートレスです。グローバルな情報はどこかに保存する必要があります。セッションを正しく使用すると、セッションを悪くすることはありません。 Sessionの内容を最小限に抑えるには、ユーザーのID(または固有ID)を保存し、その顧客に関する情報が必要な場合は、データベースから取得します。 –

+0

私はブライアンと全く同意します。あなたの質問から、オブジェクト指向プログラミングの仕組みが不足しているようです。 – gideon

答えて

0

ユーザーが正常にログインしたら、DBを1回呼び出して現在の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としてちょうど同じだ - ちょうどViewStateSessionを交換してください。

あなたは

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

を使用して、あなたはこのようCache項目にアクセスすることができ、その後Cacheでそれを保存したい場合:

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

は、この情報がお役に立てば幸い!

関連する問題