Получение System.ObjectDisposedException при перенаправлении страниц - PullRequest
0 голосов
/ 06 сентября 2018

Обновление: проблема заключалась в том, что методы OnGet были асинхронными. Спасибо всем за помощь и вклад!

На моей первой странице (Главная) я получаю список пользователей:

HomePageModel:

public async void OnGetAsync()
    {
            var everything = await _context.Users.ToListAsync();
            GetUsers = everything;
    }

Затем я создаю список пользователей на странице и ссылку, которая перенаправляет на страницу с другим списком ставок пользователей:

Домашняя страница:

<ul class="list-group">
@foreach (var user in Model.GetUsers)
{
<li class="list-group-item">
    //Irrelevant stuff
    <a asp-page="./UserBets" asp-route-id="@user.Id">View Bets</a>
</li>
}
</ul>

Это перенаправляет на UserBets, вот модель UserBets:

public async void OnGetAsync(string Id)
    {
        if (Id != null)
        {   //Debugging             
            Message += Id;
            using (var db = _context)
            {
                var everything = await _db.Bet.Where(a => a.UserId == Id).Select(s => s.MatchId).SingleAsync();
                GetBets = everything;
            }
        }            
    }

Когда он туда попадает, я получаю сообщение:

System.ObjectDisposedException: 'Невозможно получить доступ к удаленному объекту. Распространенной причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения. Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using. Если вы используете внедрение зависимости, вы должны позволить контейнеру введения зависимости позаботиться об удалении экземпляров контекста. Имя объекта: 'AsyncDisposer'. '

Я пробовал без использования областей, чтобы они были на обеих моделях страниц. Дело в том, что я не совсем понимаю проблему здесь, поэтому мне жаль, если я не даю вам достаточно контекста или кода, но спрашиваю, нужно ли вам больше.

Я хочу распечатать список ставок пользователей. Заранее спасибо!

1 Ответ

0 голосов
/ 06 сентября 2018
using (var db = _context)
{
    var everything = await _context.Bet.Where(a => a.UserId == Id).Select(s => s.MatchId).SingleAsync();
    GetBets = everything;
}

Ваш using избавится от _context сразу после строки GetBets = everything;. Проблема в том, что _context не принадлежит вашему методу, поэтому любой другой код, который использует _context, найдет его удаленным. Я полагаю, что у вас есть аналогичный код в другом месте, который также избавляется от него, и, вероятно, именно поэтому проблема возникает здесь.

Не распоряжайтесь общими объектами, пока они больше не будут использоваться (обычно, когда содержащий класс уничтожается - вы должны добавить свою собственную реализацию IDisposable в родительский класс).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...