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

EF Core实体类配置详解(使用Fluent API实现C#数据库映射)

在使用 Entity Framework Core(简称 EF Core)进行 C# 开发时,我们常常需要对实体类与数据库表之间的映射关系进行精细控制。虽然可以通过数据注解(Data Annotations)来实现基本配置,但更强大、更灵活的方式是使用 Fluent API。本文将手把手教你如何使用 Fluent API 配置 EF Core 实体类,即使是编程小白也能轻松上手!

什么是 Fluent API?

Fluent API 是 EF Core 提供的一种通过代码方式配置模型的方法。它比数据注解更强大,支持更多高级功能,比如配置复合主键、索引、外键约束、表名自定义等。所有配置都写在 OnModelCreating 方法中,集中管理,便于维护。

EF Core实体类配置详解(使用Fluent API实现C#数据库映射) Core实体类配置 Fluent API配置 Entity Framework Core教程 C#数据库映射 第1张

准备工作:创建一个简单的实体类

假设我们要创建一个博客系统,其中有一个 Blog 实体:

public class Blog{    public int Id { get; set; }    public string Title { get; set; }    public string Url { get; set; }    public DateTime CreatedAt { get; set; }}

在 DbContext 中使用 Fluent API 配置实体

接下来,在你的 DbContext 子类中重写 OnModelCreating 方法,并使用 Fluent API 进行配置:

using Microsoft.EntityFrameworkCore;public class ApplicationDbContext : DbContext{    public DbSet Blogs { get; set; }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        // 配置 Blog 实体        modelBuilder.Entity(entity =>        {            // 设置表名为 "BlogsTable"            entity.ToTable("BlogsTable");            // 配置主键            entity.HasKey(e => e.Id);            // 配置 Title 字段最大长度为 100,且不能为空            entity.Property(e => e.Title)                  .IsRequired()                  .HasMaxLength(100);            // 配置 Url 字段唯一且不能为空            entity.HasIndex(e => e.Url)                  .IsUnique();            entity.Property(e => e.Url)                  .IsRequired();            // 配置 CreatedAt 默认值为当前时间            entity.Property(e => e.CreatedAt)                  .HasDefaultValueSql("GETDATE()"); // SQL Server 示例        });        base.OnModelCreating(modelBuilder);    }}

常见 Fluent API 配置示例

以下是一些常用的 Fluent API 配置技巧:

  • 设置列名
    entity.Property(e => e.Title).HasColumnName("blog_title");
  • 忽略某个属性不映射到数据库
    entity.Ignore(e => e.TemporaryNote);
  • 配置复合主键
    entity.HasKey(e => new { e.UserId, e.RoleId });
  • 配置外键关系(一对多):
    entity.HasMany(b => b.Posts).WithOne(p => p.Blog).HasForeignKey(p => p.BlogId);

为什么选择 Fluent API 而不是数据注解?

虽然数据注解(如 [Required][MaxLength(100)])简单直观,但它们会污染你的实体类,使业务逻辑与数据持久化逻辑耦合在一起。而 Fluent API 将配置集中在 DbContext 中,保持实体类“干净”,更符合关注点分离原则。此外,某些高级功能(如全局查询过滤器、复杂索引)只能通过 Fluent API 实现。

总结

通过本文,你已经掌握了如何使用 Fluent API 来配置 EF Core 实体类。这种配置方式不仅灵活强大,还能让你的代码结构更清晰。无论你是初学者还是有经验的开发者,掌握 Fluent API 都是提升 C# 数据库开发能力的关键一步。

记住,EF Core 实体类配置、Fluent API 配置、Entity Framework Core 教程 和 C# 数据库映射 是你深入学习 EF Core 的核心关键词。多加练习,你很快就能熟练运用这些技术构建高性能的数据驱动应用!