web-dev-qa-db-ja.com

.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でのエンティティ検証エラータイプの予想を知る必要があります。

16
Jins Peter

Githubの問題を見ると、Entity Framework CoreにはDbEntityValidationExceptionに相当するものはありません。 ブログ (Githubの問題 #9662 からリンク)があります。これは、検証ロジックを自分で実行するためのコード例を示しています。

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をスローします。これは適切に処理できます。

検証属性で問題が発生した場合のリンクされた問題には、もう少し情報があります。

24
Kirk Larkin