ModelState действителен, но когда я сохраняю данные, я получаю их в entityValidationErrors, в которых есть ошибки - PullRequest
0 голосов
/ 04 мая 2018

Когда я публикую и получаю модель, эта модель содержит ошибки. Я удаляю эти ошибки следующим образом.

if (!ModelState.IsValid)
{
   int pos = 0;
   while (pos < ModelState.Keys.Count())
   {
      if (ModelState[ModelState.Keys.ElementAt(pos)].Errors.Any())
      {
          ModelState[ModelState.Keys.ElementAt(pos)].Errors.Clear();
      }
      pos++;
   }  
}            

bool mod = ModelState.IsValid;

когда я выполнил процесс в то время как в bool у меня есть истина, то есть моя модель действительна. После этого процесса я сохраняю модель следующим образом.

            reg x = _context.register.Create();
            x = _context.register.Add(data);

            try
            {  
                _context.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                            ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }

Я не понимаю, что, очистив ModelState от ошибок всякий раз, когда я продолжаю вводить улов, мне показывают поля ошибок моей модели, которые я теоретически очистил ранее. почему?

1 Ответ

0 голосов
/ 04 мая 2018

Поскольку существует две стадии проверки вашей модели.

Первый шаг выполняется проверкой ASP.Net MVC, которая проверяет ее перед использованием в методе действия. На самом деле в вашем коде вы просто очищаете список ошибок, обнаруженных ASP.Net MVC, но вы не установили правильные значения для свойств вашей модели, на которые влияют ошибки.

После этого первого шага проверки происходит Entity Framework Validation, которая выполняется при сохранении ваших сущностей в вашей базе данных путем вызова SaveChanges. EF также использует тот же способ, что и ASP.Net MVC, используя аннотации данных, а также использует конфигурацию вашей модели для проверки вашей сущности. Как я уже говорил, вы только что очистили сообщение об ошибке, но не установили правильные значения, поэтому с EF у вас будут такие же ошибки.

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

В любом случае, если вы хотите отключить проверки EF, вы можете сделать это, установив эту конфигурацию в конструкторе DbContext:

this.Configuration.ValidateOnSaveEnabled = false;

Это не рекомендуется, поскольку вы можете сохранить в базу данных неверные данные. Вы также можете получить исключение из вашей базы данных, например, если в вашей базе данных есть обязательный столбец, но вы отправляете значение null из свойства, сопоставленного с этим столбцом.

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