Я разрабатываю проект ASP.NET MVC, и я хотел бы lazy-load объект базы данных DataContext, который используется через Class
es в запросе на сервер (то есть, он работает только через запрос и для каждого запроса, У меня есть уникальный объект).Сохраните объект, доступный в запросе на сервер?
В настоящее время я могу получить запрос с использованием HttpContext.Current
или HttpContext.Current.Request
, но в запросе хранятся только строковые значения.
Есть ли что-то вроде объекта Session
, но только для запроса? Что-то вроде ViewBag или ViewData, но доступно из объекта HttpContext
?
EDIT: Вот что я пытаюсь достичь: у меня есть класс AccountBusiness
, который может быть создан несколько раз в запросе. Он имеет свойство LoggedInUser
(примечание: это не объект AspNetUser ASP.NET Identity), который ленив. Обычно я хотел бы сделать что-то вроде этого:
private UserProfile loggedInProfile;
public UserProfile LoggedInProfile
{
get
{
if (this.loggedInProfile == null)
{
var userId = HttpContext.Current.User.Identity.GetUserId();
this.loggedInProfile = this.Context.UserProfiles.FirstOrDefault(q => q.ID == userId);
}
return this.loggedInProfile;
}
}
Однако, как я уже говорил ранее, это свойство может быть инстанцировано несколько раз в запросе, он будет иметь доступ к нескольким раз для базы данных только одного и того же объекта UserProfile. Это просто пример, у меня гораздо больше объектов, подобных этому, и хотел бы изменить так, что доступ только к базе данных один раз, а затем сохранить его для использования для текущего запроса, как это:
public UserProfile LoggedInProfile
{
get
{
if (this.loggedInProfile == null)
{
var dataTokens = HttpContext.Current.Request.RequestContext.RouteData.DataTokens;
object o;
if (!dataTokens.TryGetValue("CurrentUserProfile", out o))
{
var userId = HttpContext.Current.User.Identity.GetUserId();
dataTokens["CurrentUserProfile"] = o = this.Context.UserProfiles
.FirstOrDefault(q => q.ID == userId);
}
this.loggedInProfile = o as UserProfile;
}
return this.loggedInProfile;
}
}
ли В моем решении есть что-то плохое?
P.s: Я только что обнаружил, что RouteValues
и DataTokens
могут содержать пару key-object
, но мне интересно, можно ли использовать его?
Спасибо, это на самом деле то, что мне нужно! –