Nano Hash - криптовалюты, майнинг, программирование

Обработка исключений для каждого объекта в context.saveChanges()

Можно ли получить конкретное исключение неудачного сохранения для каждого объекта в комплекте?

Простое использование saveChanges() дает одно исключение для всех диапазонов.

Это мой код с блоком try-catch.:

  foreach (EntityBase ent in response.Entities)
            {
                try
                {
                    //save each ent ?
                }
                catch (DbEntityValidationException ex){...}
                catch (DbUpdateException e) { ...}

                catch (Exception ex){...}
            }

Ответы:


1

Не без вызова сохранения изменений после каждого изменения, которое вы вносите в прикрепленный/отслеживаемый объект.

Я бы посоветовал не делать этого, так как это может замедлить работу вашего приложения в зависимости от того, сколько изменений вы хотите зафиксировать. Если вы решите сделать это и хотите откатить предыдущие изменения в случае сбоя, вам нужно будет добавить обернутую транзакцию, которую вы фиксируете/откатываете после выполнения всего набора изменений. Вам также придется вручную отсоединять/откатывать изменения после сбоя, чтобы следующее сохранение изменений при следующем изменении не вызывало предыдущий сбой, который только что произошел. Самый простой способ сделать последнее — отсоединить этот объект или воссоздать экземпляр DbContext.


Если вы хотите проверить перед сохранением в DbContext, см. этот предыдущий вопрос и ответ. Он не может уловить все ошибки, такие как ограничения на уникальные индексы, но может уловить все, что нарушает ограничения на данные, например, отсутствующие обязательные значения: сущности перед сохранением и удалением из контекста

09.07.2018
  • Итак, могу ли я использовать другую альтернативу, исключение исключения после сохранения, которое дает полную информацию о сбойных объектах? 09.07.2018
  • @user1012506 user1012506 - Вам нужно будет сделать то же самое и написать некоторый код для накопления каждого исключения, возможно, в общем List<Exception>. После того, как вы закончите со всеми попытками изменения, вы можете создать собственное исключение с соответствующими деталями из списка (в зависимости от того, что вы хотите с ним делать). 09.07.2018

  • 2

    Это один из вариантов управления сущностью в saveChanges()

    foreach (AbstractEntity ent in response.Entities)
                    {
                        //defining new Entry for context - action by state
                        ctx.Entry(ent).State = ent.getEntityState();
                        ctx.SaveChanges();
                        ctx.Entry(ent).State = EntityState.Detached;
                    } 
    
    
                    catch (Exception ex){
    string errorMessages = ex.InnerException.InnerException.ToString();
                    throw ex.InnerException.InnerException;}
                }
    
    12.07.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..