Blazor Вторая операция началась в этом контексте до завершения предыдущей операции - PullRequest
1 голос
/ 22 сентября 2019

Я создаю NavMenu динамически и возвращаю меню в базу данных пользователями, и на странице индекса я уже что-то возвратил в базу данных, но когда я запускаю приложение или перезагружаю его, отображается ошибка ниже

InvalidOperationException: вторая операция началась в этом контексте перед завершением предыдущей операции.Обычно это вызвано тем, что разные потоки используют один и тот же экземпляр DbContext.Для получения дополнительной информации о том, как избежать проблем с многопоточностью с помощью DbContext, см. https://go.microsoft.com/fwlink/?linkid=2097913.

Код NavMenu,

List<Menu> menus = new List<Menu>();

protected override async Task OnInitializedAsync()
{ 
    menus  = await MenuService.GetMenus();

}

Индексный код

@if (priorities == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Name</th> 
            </tr>
        </thead>
        <tbody>
            @foreach (var priority in priorities)
            {
                <tr>
                    <td>@priority.Name</td>
                </tr>
            }
        </tbody>
    </table>
}

@code { 
    List<Priority> priorities;

    protected override async Task OnInitializedAsync()
    { 
        priorities = await PriorityService.GetPriorities();

    }
}

1 Ответ

1 голос
/ 22 сентября 2019

Похоже, вы совместно используете один и тот же экземпляр dbcontext для обоих запросов db, Index и NavMenu выполняются одновременно.

Если вы используете DI, проверьте, возможно ли для вас работать с transient вместо области.Это создаст новые dbcontext для каждого компонента.

Отредактировано (из-за комментариев)

Blazor - это новая технология, на мой взглядРаботая как модель blazorserver, она больше похожа на настольное приложение, чем на MVC, это не запросы, а просто клиентское приложение.Я предполагаю, что мы стоим перед новыми вызовами, которые должны переосмыслить множество концепций, см. Вопрос Дэниэла Рота (главного менеджера программ, ASP.NET) о о том, как работать с EF в Blazor .

...