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

时间:2017-09-26 15:36:29

标签: c# entity-framework asp.net-core entity-framework-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;
    }
}
如果对象保存无效,

DbEntityValidationException是来自EF的预期错误。现在我正在使用新的.NET Core 2项目,我需要知道EF Core中的预期实体验证错误类型。

1 个答案:

答案 0 :(得分:21)

通过Github问题,实体框架核心中没有DbEntityValidationException等效项。有一个blog(从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,您可以相应地处理。

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