Каков наилучший способ пакетной вставки (менее 100 объектов) с использованием DB Contex (EF)? - PullRequest
0 голосов
/ 25 июня 2018

Я пишу решение WebApi, и архитектура выполнена таким образом, что только уровень контроллера может зафиксировать (сохранить изменения в БД), используя единицу работы.Мне нужно было сделать пакетную вставку (менее 100 сущностей).Я попытался перейти к следующему

        foreach (var req in Reqs)
        {
            await unitOfWork.GetService<IReqService>().AddNewReq(req);
            try
            {
                await unitOfWork.Commit();
            }
            catch (Exception e) { }
        }

Но это не удается, если один из объектов не может быть зафиксирован, я понял, что проблема заключается в том, что у меня одна плохая сущность, связанная с БД, каждый раз, когда я будупопытайтесь зафиксировать, я буду фиксировать все, что еще не зафиксировано, включая новую сущность, которую я пытаюсь добавить И те, которые не удалось зафиксировать.То есть ничего не будет добавлено.

Я читал о том, как решить эту проблему, и читал кое-что об отсоединении сущностей, которые терпят неудачу, но я не уверен, что это будет способ сделать это с такой архитектурой.

Я думаю, что уместно разместить код коммитов так:

    public async Task Commit()
    {
        if (_tenantDatabase != null)
            await _tenantDatabase.SaveChangesAsync();
    }
...