当前位置: 首页 > news >正文

自己做的网站有排名吗网站建设优化兼职

自己做的网站有排名吗,网站建设优化兼职,ui设计案例网站,网站开发工程师应聘书范文700字数据验证是每个项目必须存在的#xff0c;可以防止不符合系统规范的数据进入系统进而导致系统不稳定甚至崩溃。我们可以自己编写代码进行验证#xff0c;但是这样一方面代码量较大#xff0c;另一方面有可能验证代码覆盖不完全。但是在 Entity Framework Core #xff08;以…数据验证是每个项目必须存在的可以防止不符合系统规范的数据进入系统进而导致系统不稳定甚至崩溃。我们可以自己编写代码进行验证但是这样一方面代码量较大另一方面有可能验证代码覆盖不完全。但是在 Entity Framework Core 以下简称 EF Core 中这些问题全可以解决。 作者朱钢 数据验证是每个项目必须存在的可以防止不符合系统规范的数据进入系统进而导致系统不稳定甚至崩溃。我们可以自己编写代码包括前台和后台代码进行验证但是这样一方面代码量较大另一方面有可能验证代码覆盖不完全。但是在 Entity Framework Core 以下简称 EF Core 中这些问题全可以解决。在 EF Core 中有两种验证模式分别是内置模型验证和第三方扩展模型验证。下面我分别对这两种模式进行讲解在讲解前我们先来创建必须的模型。 public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } 一、内置模型验证 在 EF Core 中并没有 Fluent API 模式对数据进行验证因此我们只能通过 Data Annotations 数据注解方式来进行数据验证也就是添加特性的方法来验证数据。例如我们要验证 User 模型中的 Name 的长度Name 长度不能大于 5 我们只需在 Name 属性上增加 StringLength 数据注解即可 StringLength 位于命名空间 System.ComponentModel.DataAnnotations 中修改 User 模型代码如下 public class User { public int Id { get; set; } [StringLength(5)] public string Name { get; set; } public int Age { get; set; } } 上述代码通过 StringLength(5) 数据注解将 Name 属性的数据长度限定在 5 并且在数据提交时按照这个约定进行数据验证。下面我们就通过数据注解中的验证器来验证刚才添加的特性。首先我们要创建一个上下文的扩展方法 public static ListValidationResult ExecuteValidation(DbContext context) { ListValidationResult result new ListValidationResult(); var models context.ChangeTracker.Entries() .Where(p (p.State EntityState.Added) || (p.State EntityState.Modified)); foreach (var model in models) { var entity model.Entity; var valProvider new ValidationDbContextServiceProvider(context); var valContext new ValidationContext(entity, valProvider, null); ListValidationResult error new ListValidationResult(); if(!Validator.TryValidateObject(entity,valContext,error,true)) { result.AddRange(error); } return result.ToList(); } } 在上述代码中我们通过 ChangeTracker 方法找出被追踪的实体然后过滤出需要添加和更新的实体对这些实体进行数据验证。最后我们通过 Validator 中的 TryValidateObject 方法验证实体数据并返回校验错误信息。在业务代码中我们调用前面定义的 ExecuteValidation 方法进行验证如果验证通过就调用 EF Core 的 SaveChange() 方法如果未通过就调用相应的处理代码代码片段如下 if(context.ExecuteValidation().Any()) { foreach(var error in context.ExecuteValidation()) { //处理代码 } } else { context.SaveChange(); } 讲到这里估计会有很多小伙伴说每个业务代码中都要这么写太麻烦了而且也产生了大量的重复代码。那么重复代码这个问题该怎么解决呢这时一定有部分小伙伴想到了通过重写 SaveChanges 方法将验证代码加入到这个方法中这样就可以解决刚才的那个问题达到一劳永逸的效果。具体代码如下 public override int SaveChanges(bool acceptAllChangesOnSucces) { var provider ((IInfrastructureIServiceProvider)this).Instance; var items new Dictionaryobject, object(); var models this.ChangeTracker.Entries() .Where( p (p.State EntityState.Added)||(p.StateEntityState.Modified)); foreach (var model in models) { var entity model.Entity; var context new ValidationContext(entity, provider, items); ListValidationResult results new ListValidationResult(); if(!Validator.TryValidateObject(entity,context,results,true)) { foreach (var result in results) { if(result!ValidationResult.Success) { throw new ValidationException(result.ErrorMessage); } } } } return base.SaveChanges(); } 通过上述代码就可以一处编写验证多处使用了。具体的思路和前面所讲的一样这里就不再进行讲解了。 二、第三方扩展模型验证 前面所讲的是通过数据注解的方式来进行数据验证的但是如果是使用 Fluent API 的方式就没办法解决文章开头所说的问题因为Fluent API 模式并没有提供对数据模型的验证。这时我们可以使用第三方扩展在 EF Core 中常用的模型数据验证第三方扩展是 FluentValidation.AspNetCore 。在使用前我们需要在 NuGet 中下载此扩展。 FluentValidation.AspNetCore 安装完成后我们需要为模型创建验证器验证器是一个继承自 AbstractValidatorT 的类验证规则使用 RuleFor 方法定义在验证器构造函数中。代码如下 public class ModelValidator:AbstractValidatorUser { public ModelValidator() { RuleFor(p p.Name).NotEmpty().WithMessage(姓名不能为空); RuleFor(p p.Name).MaximumLength(5).WithMessage(姓名长度在5字节); } } 上述代码进行了两个验证一个是验证 Name 字段是否为空另一个是验证 Name 字段的长度其中我们通过 MaximumLength 规定了 Name 字段的最长长度为 5 字节。之后我们通过 WithMessage 方法返回我们自定义的错误信息。 我们定义完验证规则后下一步就是将我们定义的验证规则与应用程序连接起来这里我们需要用到 AddFluentValidation 来注入例如在 Asp.Net Core 程序中我们将注入程序写入 Startup 的 ConfigureServices 方法里。我们调用 AddFluentValidation 方法会将 FluentValidation 服务添加到 Asp.Net Core 中然后使用 RegisterValidatorsFromAssembly 方法将自定义的验证代码注入到容器中代码段如下 public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddFluentValidation(p p.RegisterValidatorsFromAssemblyContainingStartup()); } 在需要验证数据的地方我们通过 ModelState 获取验证状态验证通过就执行后续代码不通过就执行处理代码。示例代码如下 if(ModelState.IsValid) { //后续代码 } else { //验证不通过处理代码 } 这里有一点需要注意当传递的实体为 null 时将返回错误信息这是因为 AbstractValidator 中存在 EnsureInstanceNotNull 方法这个方法在实例为 null 时会抛出异常即使重写该方法也无法返回自定义的错误信息。如果需要验证实体集合就需要使用 RuleForEach 方法即可对于自定义验证规则则可使用 SetValidator 方法。 三、总结 本篇文章讲解了 EF Core 数据验证的方法虽然讲的是 EF Core 的方法但是同样也适用于 EF6 这些内容是常用的上述部分代码可以在大部分项目中通用。 阅读目录置顶)(长期更新计算机领域知识 阅读目录置顶)(长期更新计算机领域知识 阅读目录置顶)(长期科技领域知识 歌谣带你看java面试题
http://www.zqtcl.cn/news/484918/

相关文章:

  • 策划对于企业网站建设来说网站开发新加坡
  • 做仪表行业推广有哪些网站个人网站备案模板
  • 做微网站是订阅号还是服务号号网站建设叫什么软件
  • 美团初期是怎么建网站特效视频素材网站
  • 网站建设行业市场分析刚创业 建网站
  • 网站推广昔年下拉wordpress 首页添加链接地址
  • 网站年费推荐专业做网站公司
  • 邵东微网站建设设计网页图片
  • 沈阳高端做网站建设应用软件商店
  • 05网站首页设计说明
  • 给企业做网站运营手机做简单的网站
  • 做网站卖广告国家公示企业信息查询系统
  • 西安网站建设公司找哪家如何做平台推广赚钱
  • 网站优化个人工作室怎么找网站开发公司
  • 如何把网站一个栏目做301跳转推广途径
  • 房山做网站北京本地网络推广平台
  • 网站建设 麓谷政法网站建设有哪些不足
  • 湖北网站建设路建设工程安全事故在哪个网站查
  • 建筑公司查询网站网站开发 系统需求文档
  • 温州做网站的公司有哪些宝塔搭建wordpress主机地址
  • 重庆商务网站建设南昌新力中心 nanchang sinic center
  • 潍坊建设厅官方网站店铺网络营销策划方案
  • 东营聊城网站建设博客论坛用wordpress
  • 哈尔滨中国建设银行网站首页seo快速入门教程
  • 网站建设项目环境影响评价目录南宁网站建设索王道下拉
  • 广州富邦物流网站建设南宁住房和城乡建设部网站
  • asp.net 公司网站全面的移动网站建设
  • 中国空间站官网app下载平台有哪些
  • 做外贸网站报价单做网站需要什么证件吗
  • 网站可以做视频链接东红物流网站建设规划书