.Net Core 2 - EF Core Обработка ошибок Сохранить изменения

Я использую EF6, и мой базовый репозиторий Save() выглядит так:

public void Save()
{
    try
    {
        Context.SaveChanges();
    }
    catch (DbEntityValidationException ex)
    {
        //Do Stuff
    }
    catch (Exception exception)
    {
        //Do stuff.
    }
    else
    {
        throw;
    }
}

DbEntityValidationException - ожидаемая ошибка от EF, если сохранение объекта недействительно. Теперь, когда я нахожусь в новом проекте.NET Core 2, и мне нужно знать, что такое тип ошибки проверки ожидаемой сущности в EF Core.

Ответ 1

Просматривая проблемы Github, в Entity Framework Core нет эквивалента DbEntityValidationException. Там блог (связанный с выпуском № 9662 на Github), который дает пример кода для выполнения логики проверки самостоятельно, включенный здесь для полноты:

class MyContext : DbContext
{
    public override int SaveChanges()
    {
        var entities = from e in ChangeTracker.Entries()
                       where e.State == EntityState.Added
                           || e.State == EntityState.Modified
                       select e.Entity;
        foreach (var entity in entities)
        {
            var validationContext = new ValidationContext(entity);
            Validator.ValidateObject(entity, validationContext);
        }

        return base.SaveChanges();
    }
}

Validator.ValidateObject исключение ValidationException если проверка не выполняется, и вы можете обрабатывать соответствующим образом.

Там немного больше информации в связанной проблеме, если вы столкнулись с проблемами с атрибутами проверки.