wake-up-neo.com

.Net Core 2 - EF Core Fehlerbehandlung Änderungen speichern

Ich verwende EF6 und mein Basis-Repository Save () sieht so aus

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

DbEntityValidationException ist ein erwarteter Fehler von EF, wenn das Speichern des Objekts ungültig ist. Jetzt, da ich mich in einem neuen .NET Core 2-Projekt befinde und wissen muss, welcher Entitätsvalidierungsfehlertyp in EF Core erwartet wird.

16
Jins Peter

Wenn Sie sich die Github-Probleme ansehen, gibt es in Entity Framework Core kein Äquivalent zu DbEntityValidationException. Es gibt ein Blog (verlinkt von Ausgabe # 9662 auf Github), das der Vollständigkeit halber ein Codebeispiel für die Durchführung der Validierungslogik selbst enthält:

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 wirft ein ValidationException, wenn die Validierung fehlschlägt, was Sie entsprechend behandeln können.

Das verknüpfte Problem enthält weitere Informationen, falls Probleme mit den Validierungsattributen auftreten.

24
Kirk Larkin