Каков наилучший подход к реализации сохранения данных с использованием таблиц базы данных по нескольким шагам мастера в ASP.NET MVC?ASP.NET MVC сохраняющиеся данные на нескольких шагах мастера с использованием таблиц базы данных
В данный момент мы используем сеанс, чтобы сохранить много данных на нескольких шагах/видах мастера. Мы сталкиваемся с проблемой, и мы подозреваем, что время ожидания сеанса виновата. По этой причине мы решили заменить сеансы таблицами базы данных.
До сих пор мы установили, что нам нужно следующее:
Когда пользователь нажимает на первой странице генерируется уникальный идентификатор/маркер (возможно базы данных первичного ключа), который будет определять, где данные хранится в течение рабочего процесса. Этот идентификатор/токен сохраняется с использованием URL-адреса , если это вообще возможно, так что нам не нужно выполнять сеансы.
Отдельные таблицы для каждого вида/шага мастера. Мы реализовали логику в каждом действии, которое проверили объекты шага мастера, сохраненные в сеансе, чтобы гарантировать, что пользователь не сможет пропустить шаги в рабочем процессе. Реализация аналогичного тестирования с сохранением данных базы данных будет проще, если данные разделены на разные таблицы, а не на одну таблицу.
Сохранение метки времени истечения срока годности где-то в записи, связанной с предоставленным идентификатором/токеном, для имитации тайм-аутов сеанса, например, когда обработки отправили форму, если текущее время даты больше, чем сохраненная отметка даты и времени отклонить запрос
рамки использования сущности, чтобы толкать и тянуть данные
Мы просто с трудом выяснить, как реализовать это в коде , Мы столкнулись с 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;}
}
Каков наилучший способ реализации этого подхода? Как мы создаем/отслеживаем этот уникальный токен, который определяет, откуда извлекаются данные? Как мы тестируем, что пользователи выполнили предыдущие шаги и не пробовали пропустить? Любой код контроллера/мысли о том, как мы можем реализовать этот подход, оцениваются.
Почему бы не использовать одноэлементный класс для хранения и сохранения данных в вашем приложении? –