.NET Core 2 - EF Core 错误处理 保存更改
Posted
技术标签:
【中文标题】.NET Core 2 - EF Core 错误处理 保存更改【英文标题】:.NET Core 2 - EF Core Error handling Save changes 【发布时间】:2018-03-07 22:09:25 【问题描述】:我习惯了 Entity Framework 6,我的 base 存储库 Save() 看起来像这样:
public void Save()
try
Context.SaveChanges();
catch (DbEntityValidationException ex)
// Do stuff
catch (Exception exception)
// Do stuff
else
throw;
DbEntityValidationException
是来自实体框架的预期错误,如果对象保存无效。现在我正在处理一个新的 .NET Core 2 项目。 Entity Framework Core 中的预期实体验证错误类型是什么?
【问题讨论】:
你有没有想过尝试看看抛出了什么异常? “异常”总是“意外”。如果您“预期”某些“特殊情况”(顺便说一句,为什么不阻止它?) - 这是您的应用程序特定的。 【参考方案1】:查看 GitHub 问题,Entity Framework Core 中没有 DbEntityValidationException
等效项。 a blog post(从 GitHub 上的 issue #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
,您可以进行相应处理。
链接问题中提供了更多信息,以防您遇到验证属性问题。
注意:Validator
类位于 System.ComponentModel.DataAnnotations
命名空间中。
【讨论】:
不做参照完整性,只是数据注释样式验证。 还有一个 TryValidateObject 可以让你在不抛出异常的情况下收集错误。 如果您需要包含额外的验证,例如MinLength
,您可能需要将validateAllProperties
bool 参数添加为:Validator.ValidateObject(entity, validationContext, validateAllProperties: true)
以上是关于.NET Core 2 - EF Core 错误处理 保存更改的主要内容,如果未能解决你的问题,请参考以下文章
.Net Core 3 和 EF Core 3 包含问题 (JsonException)
如何使用 EF Core 在 ASP.NET Core 中取消应用迁移