Entity Framework - удаление не обновляет сущность внука из базы данных - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть объекты виджетов, которые принадлежат объектам компании. Между компаниями и виджетами существует отношение один ко многим.

У меня есть сущности WidgetDetail, принадлежащие сущностям виджетов. Между виджетами и WidgetDetails существует отношение один-ко-многим.

Компании имеют CompanyId.

Виджеты имеют CompanyId и WidgetId.

WidgetDetails имеют WidgetId и a WidgetDetailId.

Вот мой первый проход по методу Delete для удаления WidgetDetail:

public async Task<ActionResult> DeleteWidgetDetail([FromRoute] int companyId, [FromRoute] int widgetId, int widgetDetailId)
{
    WidgetDetail widgetDetail = await _myContext.Widgets
        .Where(w => w.CompanyId == companyId && w.WidgetId == widgetId)
        .AsNoTracking()
        .SelectMany(w => w.WidgetDetails)
        .Where(wd => wd.WidgetDetailId == widgetDetailId)
        .FirstOrDefaultAsync();

    if (widgetDetail == null)
    {
        return NotFound();
    }

    else
    {
        widgetDetail.IsDeleted = true;
        await _myContext.SaveChangesAsync();
        return Ok();
    }
}

Я могу зайти в него и увидеть, что для свойства IsDeleted установлено значение false, но это изменение не передается в базу данных.

1 Ответ

0 голосов
/ 28 апреля 2020

D'oh ... нашел свою проблему.

Я удалил метод AsNoTracking(), и это решило проблему. Я неправильно понял, что он делал.

см. Здесь: https://docs.microsoft.com/en-us/ef/core/querying/tracking для подробностей

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