ASP.NET MVC のいくつかのウィザード手順でデータベース テーブルを使用してデータの永続性を実装するための最良の方法は何ですか?
現時点では、セッションを使用して、いくつかのウィザード ステップ/ビューにわたって大量のデータを保持しています。問題が発生しており、セッション タイムアウトが原因であると思われます。このため、セッションをデータベース テーブルに置き換えることにしました。
これまでのところ、次のものが必要であることを確認しました。
ユーザーが最初のページにアクセスすると、ワークフロー全体でデータが保存される場所を決定する一意の ID/トークン (おそらくデータベースのプライマリ キー) が生成されます。この ID/トークンは、可能であれば URL を使用して永続化されるため、セッションを再実装する必要はありません。
ウィザードのビュー/ステップごとに表を分けてください。各アクションには、セッションに保存されたウィザード ステップ オブジェクトをテストするロジックが実装されており、ユーザーがワークフローのステップをスキップできないようになっています。データベース データの永続性を使用した同様のテストの実装は、単一のテーブルとは対照的に、データを複数のテーブルに分割した方が簡単です。
セッション タイムアウトを模倣するために、提供された ID/トークンに関連付けられたレコードのどこかに有効期限のタイム スタンプを保存する。
エンティティ フレームワークを使用してデータをプッシュおよびプルする
これをコードに実装する方法を理解するのに苦労しています。http://www.4guysfromrolla.com/webtech/041600-2.shtmlに出会いましたが、これは多少役に立ちましたが、ASP.NET MVC コントローラーに実装する方法を実際には説明していませんでした。
以下のコードのスニペットを提供して、セッションを使用して現在どのように処理を行っているかをある程度理解できるようにします。
コントローラ
[HttpGet]
public ActionResult StepOne() {
StepOneViewModel stepOneModel;
WizardViewModel wizard = (WizardViewModel)Session["Wizard"];
if(wizard == null || wizard.StepOne == null)
stepOneModel = new StepOneViewModel();
else
stepOneModel = wizard.StepOne
return View();
}
[HttpPost]
public ActionResult StepOne()
{
//validate and store data into wizard session object
}
public ActionResult StepTwo()
{
StepTwoViewModel stepTwoModel;
WizardViewModel wizard = (WizardViewModel)Session["Wizard"];
if(wizard == null || wizard.StepOne == null)
return RedirectToAction("StepOne");
if(wizard.StepTwo == null)
stepTwoModel = new StepTwoViewModel();
else
stepTwoModel = wizard.StepTwo;
Session["Wizard"] = wizard;
return View();
}
ウィザード モデル
public WizardViewModel
{
public StepOne { get; set; }
public StepTwo { get; set;}
}
このアプローチを実装する最良の方法は何ですか? データの取得元を決定するこの一意のトークンをどのように作成/追跡しますか? ユーザーが前のステップを完了し、スキップしようとしなかったことをどのようにテストしますか? このアプローチを実装する方法に関するコントローラーのコード/考えは大歓迎です。