четверг, 6 ноября 2014 г.

Что такое EntityValidationErrors и как с ним бороться.

При использовании Entity Framework вы можете столкнуться с ошибкой, гласящей "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details." Причина появления этой ошибки в большинстве случаев - банальна, либо вы забыли какие ограничения существуют на полях в вашей базе данных, либо, если БД в вашей компании занимается отдельный человек, то он вам забыл о чем-то сообщить. ;)


EntityValidationErrors - это коллекция объектов DbEntityValidationResult, каждый из которых содержит информацию об ошибках одной EF-сущности в виде объектов DbValidationError.
На самом деле, ничего страшного в этой ошибке нет, и можно легко узнать в чем конкретно у нас ошибка в коде. Все, что для этого необходимо - это обернуться вызов метода SaveChanges() вот в такой блок try-catch:



 
                try
                {

                    DB.DB.SaveChanges();

                }
                catch (DbEntityValidationException ex)
                {
                    foreach (DbEntityValidationResult validationError in ex.EntityValidationErrors)
                    {
                        Response.Write("Object: "+validationError.Entry.Entity.ToString());
                        Response.Write("
");
                        foreach (DbValidationError err in validationError.ValidationErrors)
                        {
                            Response.Write(err.ErrorMessage + "
");
                        }
                    }
                }

Теперь повторите все те действия в результате которых появилась эта ошибка и вы увидите описание того, что не так с вашими объектами EF простым и понятным языком (в зависимости от локализации вашей ОС, конечно.


5 комментариев:

  1. Статья очень помогла. Никак не мог поймать ошибку на продакшене.

    ОтветитьУдалить
  2. Спасибо! мне тоже помогла!

    ОтветитьУдалить
  3. 000011100010110100011010000011100010111000101111000011100010111000011001
    0000111000101111000110100000111000101110001000010000111000101110000110100
    0001110001011100010111000001110000110110010110000010100000011100010111000
    0110100000111000101110001011100000111000101110001010110000111000101111001
    0110000001110001011110010000100001110001011100010111000001110001011100001
    1110000101110001010000001110001011010001101000001110001011110001101100001
    1100010111000011001000011100010111100011011000011100010111100101100000011
    1000101111001011110001010000001110001011100001101100001110001011110010101
    1000011100010111100011001000011100010111100011100000011100010111100100000
    0000111000101110001000010000111000101110001010110000111000101110000110010
    0010100000011100010111000100001000101000000111000101110001011010000111000
    1011100010000100001110001011100010101000001110001011100001100100001110001
    0111000101010000101000000111000101110001000010000111000101110001011010000
    1110001011100001100100001110001011110010000000001110001011100001111000010
    111

    ОтветитьУдалить