Я новичок в ядре ASP .NET, поэтому, пожалуйста, помогите.Я хотел бы избежать обращения к базе данных для основного приложения ASP .NET.У меня есть функциональность для динамического добавления столбцов в сетке данных.Настройки столбцов (видимость, разрешение, ширина, заголовок) хранятся в БД.
Поэтому я хотел бы хранить List <, PersonColumns> на сервере только для фактическихсессия.Но я не могу этого сделать.Я уже использую методы JsonConvert для сериализации и десериализации объектов в / из сессии.Это работает для List <, Int32> или объектов с простыми свойствами, но не для сложных объектов с вложенными свойствами.
Мой объект, который я хочу сохранить в сеансе, выглядит следующим образом:
[Serializable]
public class PersonColumns
{
public Int64 PersonId { get; set; }
List<ViewPersonColumns> PersonCols { get; set; }
public PersonColumns(Int64 personId)
{
this.PersonId = personId;
}
public void LoadPersonColumns(dbContext dbContext)
{
LoadPersonColumns(dbContext, null);
}
public void LoadPersonColumns(dbContext dbContext, string code)
{
PersonCols = ViewPersonColumns.GetPersonColumns(dbContext, code, PersonId);
}
public static List<ViewPersonColumns> GetFormViewColumns(SatisDbContext dbContext, string code, Int64 formId, string viewName, Int64 personId)
{
var columns = ViewPersonColumns.GetPersonColumns(dbContext, code, personId);
return columns.Where(p => p.FormId == formId && p.ObjectName == viewName).ToList();
}
}
Я хотел бы также спросить, не является ли мой подход неплохим для сохранения списка 600 записей в сеансе?Лучше ли обращаться к БД и загружать столбцы каждый раз, когда пользователь хочет отобразить сетку?
Любой совет приветствуется
Спасибо
РЕДАКТИРОВАТЬ : Я проверил, чтобы сохранить в сеансе List <, ViewPersonColumns> и егоправильно сохранен.Когда я сохраняю объект, где List <, ViewPersonColumns> является свойством, тогда сохраняются только встроенные типы , свойство List имеет значение null.
объект, который я хочу сохранить в сеансе
[Serializable]
public class UserManagement
{
public String PersonUserName { get; set; }
public Int64 PersonId { get; set; }
public List<ViewPersonColumns> PersonColumns { get; set; } //not saved to session??
public UserManagement() { }
public UserManagement(DbContext dbContext, string userName)
{
var person = dbContext.Person.Single(p => p.UserName == userName);
PersonUserName = person.UserName;
PersonId = person.Id;
}
/*public void PrepareUserData(DbContext dbContext)
{
LoadPersonColumns(dbContext);
}*/
public void LoadPersonColumns(DbContext dbContext)
{
LoadPersonColumns(dbContext, null);
}
public void LoadPersonColumns(DbContext dbContext, string code)
{
PersonColumns = ViewPersonColumns.GetPersonColumns(dbContext, code, PersonId);
}
public List<ViewPersonColumns> GetFormViewColumns(Int64 formId, string viewName)
{
if (PersonColumns == null)
return null;
return PersonColumns.Where(p => p.FormId == formId && p.ObjectName == viewName).ToList();
}
}
Сохранить столбцы в сеансе
UserManagement userManagement = new UserManagement(_context, user.UserName);
userManagement.LoadPersonColumns(_context);
HttpContext.Session.SetObject("ActualPersonContext", userManagement);
HttpContext.Session.SetObject("ActualPersonColumns", userManagement.PersonColumns);
Загрузить столбцы из сеанса
//userManagement build-in types are set. The PersonColumns is null - not correct
UserManagement userManagement = session.GetObject<UserManagement>("ActualPersonContext");
//The cols is filled from session with 600 records - correct
List<ViewPersonColumns> cols = session.GetObject<List<ViewPersonColumns>>("ActualPersonColumns");