У меня есть приложение ASP.NET WebForms, которое активно работает с сессиями.На самом деле, у меня есть модель под названием Анкета
public class myQuestionnaire
{
public int ID { get; set; }
public string Name { get; set; }
public string Status { get; set; } = "A";
public List<Question> Questions { get; set; } = new List<sQuestion>();
}
Анкета содержит список вопросов
public class Question
{
public int ID { get; set; }
public string Name { get; set; } = "";
public string Remarks { get; set; } = "";
public List<QuestionAnswer> Answers { get; set; } = new List<QuestionAnswer>();
}
public class QuestionAnswer
{
public int ID { get; set; }
public string Name { get; set; }
public string Text { get; set; }
public int Weight { get; set; }
}
У меня есть форма обслуживания, в которой я загружаю Анкету из базы данных, сохраняюэто в переменной сеанса, и для каждого изменения, которое мне нужно выполнить в вопроснике, я загружаю его из сеанса вместо того, чтобы загружать каждый раз из БД.
Например, чтобы изменить имя вопросника, у меня есть следующий веб-методкоторый запускается через javascript, когда имя анкеты в форме изменяется
[WebMethod(EnableSession = true)]
public void ChangeName(string new_name)
{
myQuestionnaire _q = () Session["MyQuestionnaireSessionName"];
_q.Name = HttpUtility.UrlDecode(name);
}
Теперь мы решили перенести решение в .NET Core, но мы столкнулись с некоторыми проблемами при использовании вышеуказанного подхода.На самом деле, невозможно сохранить объект в сеансе без сериализации его в строку.Если мы сделаем это, то мы не сможем получить доступ к объекту напрямую, поэтому нам нужно будет вручную сериализовать его и десериализовать его при каждом изменении, которое мы выполняем над объектом.
Второй вопрос: существует ли альтернативный способ реализациивышеупомянутый случай без сохранения всего объекта в базе данных для каждого временного изменения.Мы думаем о файлах cookie, кэше и viewstate, но я недостаточно знаком с MVC и CORE и не знаю плюсов и минусов каждого из них.