SaveChangesAsync () зависает в EF Core 3.1

Веб-API VS 2019 ASP.NET Core 3.1 EF Core 3.1

В моей базе данных SQL есть следующая структура таблицы:

введите здесь описание изображения

Я разрешаю пользователям «редактировать» шаблон (изменять действия / группы). Когда они сохраняются, я удаляю всех дочерних элементов шаблона и повторно добавляю новых дочерних элементов (переданных в класс DTO). Код такой:

   var now = DateTime.UtcNow;

    var template = await _context.Template
        .Include(t => t.TemplateCell)
        .Include(t => t.TemplateGroup)
        .ThenInclude(t => t.TemplateCell)
        .Include(t => t.TemplateAction)
        .ThenInclude(t => t.TemplateCell)
        .FirstOrDefaultAsync(t => t.Id == dto.Id);

    // Updates the templates details
    template.Name = dto.Name;
    template.Description = dto.Description;
    template.InitialRisk = dto.InitialRisk;
    template.ModifiedWhen = now;
    template.ModifiedByUserId = user.Id;

    // Clear the old children
    template.TemplateCell
        .Clear();
    template.TemplateAction
        .Clear();
    template.TemplateGroup
        .Clear();

    // Add the new children
    int sortOrder = 0;
    foreach (var groupName in dto.GroupNames)
    {
        template.TemplateGroup
            .Add(new TemplateGroup
            {
                Name = groupName,
                SortOrder = sortOrder++
            });
    }

    sortOrder = 0;
    foreach (var actionName in dto.ActionNames)
    {
        template.TemplateAction
            .Add(new TemplateAction
            {
                Name = actionName,
                SortOrder = sortOrder++
            });
    }

    int cellIndex = 0;
    foreach (var group in template.TemplateGroup)
        foreach (var action in template.TemplateAction)
            template.TemplateCell
                 .Add(new TemplateCell
                 {
                     TemplateGroup = group,
                     TemplateAction = action,
                     IsEnabled = dto.Cells[cellIndex++]
                 });

    await _context.SaveChangesAsync();  // Does not seem to ever return from here?

    return template.Id;

Он доходит до await _context.SaveChangesAsync () и, кажется, никогда не возвращается из этого метода. SQL Profiler не показывает активности.

Может ли кто-нибудь увидеть, что может быть причиной проблемы?


person Rob L    schedule 20.12.2019    source источник


Ответы (1)


Мне удалось заставить его работать, но я понятия не имею, почему мне пришлось удалять вещи «дважды» ...

    _context.TemplateCell.RemoveRange(template.TemplateCell);
    _context.TemplateAction.RemoveRange(template.TemplateAction);
    _context.TemplateGroup.RemoveRange(template.TemplateGroup);

    template.TemplateCell
        .Clear();
    template.TemplateAction
        .Clear();
    template.TemplateGroup
        .Clear();
person Rob L    schedule 21.12.2019