当前位置:首页 > C# > 正文

EF Core数据注解详解(C#中使用Entity Framework Core实现数据验证与映射)

在使用 C# 开发基于 Entity Framework Core(简称 EF Core)的应用程序时,EF Core数据注解(Data Annotations)是一种非常直观且强大的方式,用于配置实体类的数据库映射关系以及实现数据验证。本文将从零开始,手把手教你如何在项目中使用这些注解,即使是编程小白也能轻松上手。

EF Core数据注解详解(C#中使用Entity Framework Core实现数据验证与映射) Core数据注解 Entity Core 数据验证 C#数据注解 第1张

什么是 EF Core 数据注解?

EF Core数据注解是 .NET 提供的一组特性(Attributes),你可以直接在实体类的属性或类上添加这些特性,从而告诉 EF Core 如何将你的 C# 类映射到数据库表,或者在保存数据前进行哪些验证。

常见的用途包括:

  • 指定主键、外键
  • 设置字段是否可为空
  • 限制字符串长度或数值范围
  • 自定义数据库列名或表名
  • 实现输入验证(如邮箱格式、必填项等)

常用的数据注解示例

下面我们通过一个简单的 User 实体类来演示几个最常用的注解。

using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;namespace MyApp.Models{    [Table("Users")]    public class User    {        [Key]        public int Id { get; set; }        [Required(ErrorMessage = "用户名不能为空")]        [StringLength(50, MinimumLength = 3, ErrorMessage = "用户名长度必须在3到50之间")]        public string Username { get; set; } = string.Empty;        [Required]        [EmailAddress(ErrorMessage = "请输入有效的邮箱地址")]        public string Email { get; set; } = string.Empty;        [Range(18, 120, ErrorMessage = "年龄必须在18到120岁之间")]        public int Age { get; set; }        [Column(TypeName = "decimal(18,2)")]        public decimal Salary { get; set; }        [NotMapped]        public string FullName => $"{Username} ({Age}岁)";    }}

上面代码中使用了多个关键注解,我们逐个解释:

  • [Table("Users")]:指定该类映射到数据库中的 Users 表。
  • [Key]:标记 Id 为主键。
  • [Required]:表示该字段不能为空,常用于实现数据验证
  • [StringLength]:限制字符串长度,同时可设置最小和最大长度。
  • [EmailAddress]:验证邮箱格式是否正确。
  • [Range]:限制数值范围。
  • [Column(TypeName = "decimal(18,2)")]:指定数据库中该列的数据类型。
  • [NotMapped]:表示该属性不映射到数据库(例如计算属性)。

如何启用数据验证?

仅仅添加注解并不会自动触发验证。你需要在保存数据前手动调用验证逻辑。例如在 ASP.NET Core 中,控制器会自动验证模型;而在控制台应用中,你可以这样手动验证:

using System.ComponentModel.DataAnnotations;var user = new User { Username = "ab", Email = "invalid-email", Age = 10 };var validationContext = new ValidationContext(user, null, null);var validationResults = new List<ValidationResult>();bool isValid = Validator.TryValidateObject(user, validationContext, validationResults, true);if (!isValid){    foreach (var error in validationResults)    {        Console.WriteLine(error.ErrorMessage);    }}

运行上述代码,你会看到如下错误信息:

  • 用户名长度必须在3到50之间
  • 请输入有效的邮箱地址
  • 年龄必须在18到120岁之间

EF Core数据注解 vs Fluent API

除了使用数据注解,EF Core 还支持通过 Fluent APIOnModelCreating 方法中配置模型。两者各有优劣:

方式 优点 缺点
数据注解 简洁直观,验证与模型定义在一起 污染实体类,耦合度高
Fluent API 保持实体类干净,集中管理配置 配置分散,学习成本略高

对于小型项目或快速原型开发,C#数据注解是非常高效的选择;而对于大型系统,建议结合使用 Fluent API 以提高可维护性。

总结

通过本文,你已经掌握了 EF Core数据注解 的基本用法,包括如何定义主键、设置验证规则、自定义列名等。这些知识是使用 Entity Framework Core 构建健壮数据层的基础。

记住,合理使用数据注解不仅能提升开发效率,还能增强应用的数据安全性与一致性。赶快在你的项目中试试吧!

关键词回顾:EF Core数据注解Entity Framework Core数据验证C#数据注解