您现在的位置是:首页 >学无止境 >.net core 中EF Core用法网站首页学无止境

.net core 中EF Core用法

卖血买老婆 2025-07-31 00:01:04
简介.net core 中EF Core用法

什么是 Entity Framework Core (EF Core)?

Entity Framework Core 是 .NET Core 下的轻量级、跨平台、可扩展、开源的对象关系映射(ORM)框架。它用于方便地处理关系型数据库操作,将数据库中的表映射为 C# 类对象,并通过 LINQ 查询等方式简化数据访问操作。

以下是 EF Core 的核心用法,包括如何安装、配置、迁移和进行基本的增删查改操作。


一、安装 EF Core

在使用 EF Core 之前,你需要安装相关 NuGet 包。假设我们当前的项目是基于 .NET Core 的控制台应用程序。

  1. 安装基础 EF Core NuGet 包 Microsoft.EntityFrameworkCore 是 EF Core 的核心包。

    dotnet add package Microsoft.EntityFrameworkCore

  2. 选择适配器(数据库提供程序) 根据使用的数据库安装所需提供程序包。例如:

    • SQL Server

      dotnet add package Microsoft.EntityFrameworkCore.SqlServer

    • SQLite

      dotnet add package Microsoft.EntityFrameworkCore.Sqlite

    • MySQL

      dotnet add package Pomelo.EntityFrameworkCore.MySql

  3. 安装工具(可选) 如果需要支持数据库迁移功能,还需要安装以下工具包:

    dotnet add package Microsoft.EntityFrameworkCore.Tools


二、基本使用步骤

1. 创建数据模型

创建与你的数据库表相对应的模型类。例如,假设有一个用户表 Users,则我们可以创建一个 User 类:

C#

public class User
{
    public int Id { get; set; }       // 主键
    public string Name { get; set; } // 用户名
    public int Age { get; set; }     // 年龄
}

2. 创建 DbContext 子类

DbContext 是 EF Core 的核心上下文,负责管理 Entity 和数据库的交互。创建一个继承自 DbContext 的类,并在其中定义实体与数据库表的映射。

C#

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    // 定义 DbSet 与数据库中的表对应
    public DbSet<User> Users { get; set; }

    // 配置数据库连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 使用 SQL Server 数据库
        optionsBuilder.UseSqlServer("Server=localhost;Database=TestDb;Trusted_Connection=True;");
    }
}

3. 数据库迁移

EF Core 提供的迁移工具,可用于根据代码生成或更新数据库表结构:

  1. 启用迁移系统

    dotnet ef migrations add InitialCreate

    这将根据数据模型生成一组迁移代码。

  2. 更新数据库

    dotnet ef database update

    这将根据迁移文件创建或更新数据库架构。


4. CRUD 操作

以下是 EF Core 中常见的基本操作:

插入数据

C#

using System;

class Program
{
    static void Main(string[] args)
    {
        using var context = new AppDbContext();

        // 插入新用户数据
        var user = new User { Name = "Alice", Age = 25 };
        context.Users.Add(user);
        context.SaveChanges();

        Console.WriteLine("数据已插入成功");
    }
}

查询数据

使用 LINQ 查询数据库中的数据:

C#

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        using var context = new AppDbContext();

        // 查询所有用户
        var users = context.Users.ToList();
        foreach (var user in users)
        {
            Console.WriteLine($"ID: {user.Id}, Name: {user.Name}, Age: {user.Age}");
        }

        // 查询单个用户(条件查询)
        var specificUser = context.Users.SingleOrDefault(u => u.Name == "Alice");
        if (specificUser != null)
        {
            Console.WriteLine($"找到用户: ID={specificUser.Id}, Name={specificUser.Name}");
        }
    }
}

更新数据

通过修改实体对象的属性并保存更改来更新数据:

C#

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        using var context = new AppDbContext();

        // 查询要更新的用户
        var user = context.Users.SingleOrDefault(u => u.Name == "Alice");
        if (user != null)
        {
            // 修改属性
            user.Age = 30;

            // 保存更改
            context.SaveChanges();
            Console.WriteLine("用户数据已更新");
        }
    }
}

删除数据

通过 Remove 方法删除实体:

C#

using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        using var context = new AppDbContext();

        // 查询要删除的用户
        var user = context.Users.SingleOrDefault(u => u.Name == "Alice");
        if (user != null)
        {
            context.Users.Remove(user);
            context.SaveChanges();
            Console.WriteLine("用户数据已删除");
        }
    }
}

三、高级功能

1. 配置模型关系(Fluent API 和数据注解)

EF Core 支持通过 Fluent API 或数据注解定义模型的属性规则、表关系等。

数据注解

在实体类中通过属性注解指定规则:

C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public class User
{
    [Key] // 主键
    public int Id { get; set; }

    [Required] // 不允许为 null
    [MaxLength(100)] // 最大长度为 100
    public string Name { get; set; }

    public int Age { get; set; }
}
Fluent API

通过 DbContext 中的 OnModelCreating 方法配置规则:

C#

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // 配置 User 表
    modelBuilder.Entity<User>(entity =>
    {
        entity.HasKey(u => u.Id); // 设置主键
        entity.Property(u => u.Name)
              .IsRequired()
              .HasMaxLength(100); // 配置 Name 的最大长度
    });
}

2. 迁移与版本控制

  • 添加新表或修改现有表时,需要更新迁移文件:

    dotnet ef migrations add AddNewChanges

  • 查看数据库当前迁移状态:

    dotnet ef migrations list

  • 强制回滚到特定迁移:

    dotnet ef database update <MigrationName>


四、常见问题

  1. EF Core 报 "无法连接到数据库" 错误? 确保数据库连接字符串正确,并且你的数据库服务器已经启动。

  2. 模型更改后数据库未更新? 每次更改模型都需要使用 dotnet ef migrations add 添加新的迁移,然后通过 dotnet ef database update 应用迁移。


这是一份完整的 EF Core 使用入门教程,如果你需要更复杂的功能(如原生 SQL 查询、事务支持等),也可以进一步探索 EF Core 文档!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。