.Net Core 2 - EF Core错误处理保存更改

Jin*_*ter 16 c# entity-framework entity-framework-core asp.net-core asp.net-core-2.0

我用EF6和我的Base存储库Save()看起来像这样

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

DbEntityValidationException如果对象保存无效,则是EF的预期错误.现在我正在使用新的.NET Core 2项目,我需要知道EF Core中的预期实体验证错误类型是什么.

Kir*_*kin 24

通过Github问题,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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Validator.ValidateObject将抛出ValidationExceptionif验证失败,您可以相应地处理.

如果您遇到验证属性问题,链接问题中会有更多信息.

  • 还有一个 TryValidateObject 可以让您在不抛出异常的情况下收集错误。 (3认同)
  • 不进行引用完整性,仅进行数据注释样式验证。 (2认同)