2011-07-28 4 views
1

MVC3とRazorのWebサイトで作業しています。ユーザは、最終的にデータを処理する前に、いくつかの選択肢から選択する必要があります。例えば要求を越えてデータを永続化するMVC3と剃刀

: クライアント一覧 - (クライアントによってフィルタリングさ)>バージョン一覧 - >その他、各種(バージョンによってフィルタリングさ)

ユーザーがクライアントを選択すると、彼らは、クライアントのバージョンを選択します。だから私はクライアントのIDをクエリ文字列に渡しています。バージョンのコントローラの各モードについて、私はクライアントIDを渡しています。私はクライアント名を表示するビューで、私はクライアントのためにデータベースを照会し、ViewBagに詰め込んでいます。これは非常に非効率的です。クッキーを使ってクライアントのIDを&の名前にすることができたような気がします。

今、私は私のバージョンのコントローラが行ってしまったので、私は、その後の各コントローラに再び同じパターンが直面しているんだけど、今私は、クライアントとバージョンの両方を永続化する必要があります...

好ましいアプローチは何ですかこのような情報をリクエスト間で持続させるには?

答えて

1

は、これは非常に非効率です

データベースが作られ、フィールドに基づいて=>クエリデータ用に最適化され、あなたがそれらのフィールドにインデックスを置けば、それはものすごく速くなりますされているものだ

。もちろん、Session、Cookies、Cacheは、データベースへのクエリ数を制限するために使用できるいくつかの一般的な手法ですが、stalenessのデータをこの方法で取得する必要があります(他のスレッド/プロセスあなたがもはや正しい結果を得ないデータベースのデータを修正しました)。

早期に最適化を行う前に、私がお勧めすることをお勧めします。これは実際にアプリケーションのボトルネックであることが分かるまでデータベースを酷使します。上記のテクニックの1つに頼らなければならない非常に高いトラフィックのアプリケーションでは、データベースがボトルネックになる可能性があります。

+0

を参照してください。私はちょうど私がゲームに新しいとプレイヤーを知らないので、私は何か愚かな愚かな何かをやっていないことを確認したいと思った...私はあなたの答えを選ぶつもりだ@brodieの推薦でTempDataをスコープします。このアプローチはちょうど "間違って"感じます... –

0

TempDataを使用すると、現在のHTTP要求と次のHTTP要求の間でデータを渡すことができます。セッションを使用することに注意してください。

グレッグ足かせはすべてTempDataをhereについての素晴らしい記事があります

私は時期尚早の最適化に関するあなたのコメントに同意し、この類似した質問MVC3 multi step form - How to persist model object

+0

私のASPクラシック嫌悪セッションのため、私はすでに計画があるので、私はすでにこれを避けているといくつかのコントローラが残って...私はTempDataそれがパンしている場合は私の答えを更新してください。 –

関連する問題