Вызывает ли проблема изменение EF Core на Transient?
У меня есть действие контроллера, которое выглядит так:
// GET
public async Task<IActionResult> Index()
{
var user = await _userManager.GetUserAsync(HttpContext.User);
// show events that hte user is attending
var activitiesattending = await _activityManager.GetActivitiesAttendingForLoggedInUser();
// var attendingActivities = _activityManager.GetActivitiesAttendingForUser()
var activities = await _context.PlannedActivities.Select(x => new ActivityViewModel.Shared
{
Name = x.Name,
Description = x.Description,
Location = x.Location,
PointsForCompleting = x.Points,
ActivityImageURI = x.ActivityImageURI,
ID = x.ID,
isAttending = activitiesattending.Any(y => y.ID == x.ID),
ActivityOrganiser = x.Organiser,
BuddiesGoing = _buddyService.GetBuddiesAttendingActivity(user.Id, x.ID)
}).ToListAsync();
return View(new ActivityViewModel.Index(){Activities = activities});
}
Если я удалю вызов _buddyService.GetBuddiesAttendingActivity(user.Id, x.ID), то проблем не будет.
Функция GetBuddiesAttendingActivity выглядит следующим образом
public List<ApplicationUser> GetBuddiesAttendingActivity(string UserGUID, int ActivityID)
{
var buddies = GetBuddiesForUser(UserGUID).Result;
var activityattending = _activityManager.GetPeopleAttendingActivity(ActivityID).Result;
return buddies.Intersect(activityattending).ToList();
}
И функция GetPeopleAttendingActivity выглядит следующим образом
public async Task<List<ApplicationUser>> GetPeopleAttendingActivity(int activityid)
{
var peopleattending =
await _context.ApplicationUserActivities.Where(x => x.ActivityID == activityid)
.Select(x => x.ApplicationUser).ToListAsync();
return peopleattending;
}
Когда этот код выполняется, со стандартной конфигурацией EF Core для Dependency Injection, это Scoped. Это делает запрос неудачным, потому что контекст EF Core не является потокобезопасным (это достаточно справедливо). Однако изменение типа службы EF Core на Transient from Scoped заставляет запрос работать корректно.
Нормально ли меняется тип сервиса EF Core с Scoped на Transient, или это признак того, что мой код плохой, и я должен чувствовать себя плохо? Я немного новичок в Core и асинхронном программировании, поэтому извиняюсь за любые серьезные ошибки, если они есть.