Microsoft Entity validation Ошибка удаления - PullRequest
0 голосов
/ 25 марта 2019

Когда в любом объекте Dbcontext произошла ошибка проверки сущности, она становится постоянной в текущем контексте. Если в следующий раз мы передадим действительные данные для какой-либо операции (Добавить, Обновить или Удалить), предыдущая ошибка проверки все еще существует, и после этого никакая операция не обрабатывается. Я думаю, что это ошибка. Он должен быть удален, если переданы новые данные. Как удалить эту ошибку проверки из текущего контекста?

1 Ответ

0 голосов
/ 25 марта 2019

Когда мы добавляли сущность в коллекцию, она добавляла ее в свое локальное хранилище, и мы продолжали получать ошибки, поскольку локальное хранилище этой сущности неясно и все еще содержит старые записи.Таким образом, вы должны удалить эти ошибки проверки из текущего контекста.Вы можете увидеть следующую ссылку для более подробной информации: http://www.binaryintellect.net/articles/c1bff938-1789-4501-8161-3f38bc465a8b.aspx

if(ex is DbEntityValidationException dbException)
  {                 

   foreach (var eve in dbException.EntityValidationErrors)
    {                    
                    foreach (var ve in dbException.EntityValidationErrors.SelectMany(entity => entity.ValidationErrors))
                    {
                        sbErrorList.AppendLine(
                                                String.Format(" Entity: \"{0}\", Action: \"{1}\", Property: \"{2}\", Value: \"{3}\", Error: \"{4}\"",
                                                eve.Entry.Entity.GetType().Name, 
                                                eve.Entry.State,
                                                ve.PropertyName,
                                                eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
                                                ve.ErrorMessage)
                                               );
                    }

                    #region Removing Entity Validation Error from current context : Rollback Changes                       


                    // checks the State property of the DbEntityEntry causing the error
                    switch (eve.Entry.State)
                    {
                        case EntityState.Added:
                            eve.Entry.State = EntityState.Detached; // changed to Detached so that the entry won't be considered a part of the DbSet for future calls
                            break;
                        case EntityState.Modified:
                            eve.Entry.CurrentValues.SetValues(eve.Entry.OriginalValues); // the modified values (the values causing the error) are flushed out by replacing them with the OriginalValues.
                            eve.Entry.State = EntityState.Unchanged;
                            break;
                        case EntityState.Deleted:
                            eve.Entry.State = EntityState.Unchanged; // changed to Unchanged so that the entity is undeleted
                            break;
                    }
                    #endregion
                }                   
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...