Как использовать «DbContext.SaveChanges ()» для получения списка ресурсов и индивидуального перехвата исключений SQL? - PullRequest
0 голосов
/ 13 февраля 2019

Я создаю ASP.NET Core API, который принимает список ресурсов для публикации в базе данных.Требование заключается в том, что мне нужно вставить любой действительный ресурс в базу данных и зарегистрировать те, которые генерируют ошибки, в качестве ответа потребителю.

Я хочу вставить каждый ресурс при выполнении итерации списка, чтобы я мог перехватить любой SQLисключение и зарегистрировать его.Я использую «saveChanges ()» для каждого добавленного ресурса, но я заметил, что он пытается переустановить их все (возвращает ошибку «нарушение первичного ключа»);Я предполагаю, что это потому, что это тот же экземпляр DbContext.

foreach (var itemMaster in itemMasterList)
{
    if (TryValidateModel(itemMaster))
    {
        try
        {
            context.ItemMaster.Add(itemMaster);
            context.SaveChanges();
            ModelState.Clear();
        }
        catch (Microsoft.EntityFrameworkCore.DbUpdateException due)
        {
            if (due.InnerException is SqlException)
            {
                listaErrores.Add(new ItemErrorDefinition
                {
                    sourceItem = itemMaster,
                    message = due.InnerException.Message
                });
            }
        }
        catch (System.InvalidOperationException)
        {
            // HTTP request duplicated key
            listaErrores.Add(new ItemErrorDefinition
            {
                sourceItem = itemMaster,
                message = "Some message"
            });
        }
    }
    else
    {
        foreach (ModelStateEntry modelState in ViewData.ModelState.Values)
        {
            foreach (ModelError error in modelState.Errors)
            {
                listaErrores.Add(new ItemErrorDefinition
                {
                    sourceItem = itemMaster,
                    message = error.ErrorMessage
                });
            }
        }
        ModelState.Clear();
        continue;
    }
}

Как я могу добиться такого поведения catching Individual-SQLExceptions, используя класс DbContext?

Заранее спасибо!

...