白话Entity Framework Core数据验证( 四 )

if(context.ExecuteValidation().Any()) { foreach(var error in context.ExecuteValidation()) { //处理代码 else { context.SaveChange();

讲到这里估计会有很多小伙伴说每个业务代码中都要这么写太麻烦了 , 而且也产生了大量的重复代码 。 那么重复代码这个问题该怎么解决呢?这时一定有部分小伙伴想到了通过重写 SaveChanges 方法 , 将验证代码加入到这个方法中 , 这样就可以解决刚才的那个问题 , 达到一劳永逸的效果 。 具体代码如下:

public override int SaveChanges(bool acceptAllChangesOnSucces) { var provider = ((IInfrastructure<IServiceProvider>)this).Instance; var items = new Dictionary<object object>(); var models = this.ChangeTracker.Entries() .Where( p => (p.State == EntityState.Added)||(p.State==EntityState.Modified)); foreach (var model in models) { var entity = model.Entity; var context = new ValidationContext(entity provider items); List<ValidationResult> results = new List<ValidationResult>(); if(!Validator.TryValidateObject(entitycontextresultstrue)) { foreach (var result in results) { if(result!=ValidationResult.Success) { throw new ValidationException(result.ErrorMessage); return base.SaveChanges();

推荐阅读