白话Entity Framework Core数据验证("轻松掌握Entity Framework Core数据验证技巧")
原创
一、前言
Entity Framework Core(EF Core)是微软推出的一款轻量级、开源的对象关系映射(ORM)框架。它可以帮助我们轻松地将对象模型映射到数据库中,实现数据的增删改查等操作。在开发过程中,数据验证是确保数据确切性和完整性的重要环节。本文将详细介绍怎样在EF Core中进行数据验证,让你轻松掌握这一技巧。
二、EF Core数据验证简介
EF Core提供了两种数据验证对策:数据注解和Fluent API。数据注解是通过属性上的特性来定义验证规则,而Fluent API则是在配置模型时定义验证规则。下面我们将分别介绍这两种对策。
三、数据注解验证
数据注解验证是通过在模型类属性上添加特性来实现验证规则的。以下是一些常用的验证特性:
using System.ComponentModel.DataAnnotations;
public class User
{
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
[Range(18, 60)]
public int Age { get; set; }
[Required]
[RegularExpression(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$")]
public string Email { get; set; }
}
在上面的示例中,我们为User类的Name、Age和Email属性添加了验证特性。Required特性即属性不能为空,StringLength特性束缚字符串的最大长度,Range特性束缚整数属性的取值范围,RegularExpression特性用于验证邮箱格式。
四、Fluent API验证
Fluent API验证是在配置模型时定义验证规则。以下是一个示例:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity
() .Property(u => u.Name)
.IsRequired()
.HasMaxLength(100);
modelBuilder.Entity
() .Property(u => u.Age)
.IsRequired()
.HasRange(18, 60);
modelBuilder.Entity
() .Property(u => u.Email)
.IsRequired()
.Matches(@"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$");
}
在上面的代码中,我们使用Fluent API为User类的Name、Age和Email属性定义了验证规则。与数据注解相比,Fluent API提供了更灵活的验证规则定义对策。
五、自定义验证规则
除了使用内置的验证特性外,我们还可以自定义验证规则。以下是一个自定义验证规则的示例:
using System;
using System.ComponentModel.DataAnnotations;
public class CustomEmailAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
{
return new ValidationResult("邮箱不能为空");
}
string email = value.ToString();
if (!email.Contains("@"))
{
return new ValidationResult("邮箱格式不正确");
}
return ValidationResult.Success;
}
}
public class User
{
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
[Range(18, 60)]
public int Age { get; set; }
[CustomEmail]
public string Email { get; set; }
}
在上面的代码中,我们定义了一个自定义验证特性CustomEmailAttribute,用于验证邮箱格式。在User类中,我们使用CustomEmail特性对Email属性进行验证。
六、数据验证与数据库迁移
在使用EF Core进行数据库迁移时,验证规则也会被迁移到数据库中。例如,对于上面的User类,迁移命令会生成相应的数据库表和字段约束。以下是一个迁移命令的示例:
dotnet ef migrations add InitialCreate
dotnet ef database update
执行迁移命令后,数据库中会创建一个名为Users的表,其中包含Name、Age和Email字段,并带有相应的约束。
七、数据验证异常处理
在EF Core中,当数据验证未果时,会抛出一个DbUpdateException异常。我们可以捕获这个异常,并处理验证未果的情况。以下是一个异常处理的示例:
try
{
// 插入或更新数据
context.SaveChanges();
}
catch (DbUpdateException ex)
{
// 处理验证未果的情况
foreach (var entry in ex.Entries)
{
foreach (var error in entry.Entity ValidationErrors)
{
Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
}
}
}
在上面的代码中,我们尝试保存数据,如果出现DbUpdateException异常,则遍历异常中的验证差错,并输出差错信息。
八、总结
本文详细介绍了EF Core中的数据验证技巧,包括数据注解验证、Fluent API验证、自定义验证规则、数据验证与数据库迁移以及数据验证异常处理。掌握这些技巧,可以帮助我们在开发过程中确保数据的确切性和完整性,节约应用程序的健壮性。