白话Entity Framework Core数据验证("轻松掌握Entity Framework Core数据验证技巧")

原创
ithorizon 4周前 (10-21) 阅读数 46 #后端开发

轻松掌握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验证、自定义验证规则、数据验证与数据库迁移以及数据验证异常处理。掌握这些技巧,可以帮助我们在开发过程中确保数据的确切性和完整性,节约应用程序的健壮性。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门