导读:本期聚焦于小伙伴创作的《如何用C# Entity Framework入门并掌握EF Core数据库操作基础》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用C# Entity Framework入门并掌握EF Core数据库操作基础》有用,将其分享出去将是对创作者最好的鼓励。

Entity Framework是C#生态中常用的对象关系映射(ORM)框架,它能将数据库中的表映射为C#中的实体类,让开发者无需编写大量原生SQL就能完成数据库操作。EF Core是Entity Framework的轻量化跨平台版本,支持Windows、Linux、macOS系统,适配SQL Server、MySQL、PostgreSQL等多种数据库。

如何用C# Entity Framework入门并掌握EF Core数据库操作基础

环境准备

要使用EF Core,首先需要安装对应的NuGet包。如果是操作SQL Server数据库,需要安装Microsoft.EntityFrameworkCore.SqlServer包,同时建议安装Microsoft.EntityFrameworkCore.Tools包,方便后续执行数据库迁移命令。

在Visual Studio中可以通过NuGet包管理器安装,也可以通过命令行执行以下命令:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

定义实体类

实体类对应数据库中的表,类的属性对应表的字段。比如我们要创建一个用户表,对应的实体类可以定义如下:

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

// 指定对应数据库表名为Users
[Table("Users")]
public class User
{
    // 主键字段,自增
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    // 用户名,必填,最大长度50
    [Required]
    [MaxLength(50)]
    public string UserName { get; set; }

    // 用户年龄
    public int Age { get; set; }

    // 创建时间,默认值为当前时间
    public DateTime CreateTime { get; set; } = DateTime.Now;
}

创建数据库上下文

数据库上下文(DbContext)是EF Core的核心类,它负责管理实体对象和数据库的映射关系,以及执行数据库操作。我们需要自定义一个类继承DbContext

using Microsoft.EntityFrameworkCore;

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

    // 配置数据库连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 替换为实际的数据库连接字符串
        string connectionString = "Server=localhost;Database=TestDb;Trusted_Connection=True;";
        optionsBuilder.UseSqlServer(connectionString);
    }

    // 可选:配置实体和表的映射规则
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        // 可以额外配置字段属性、索引等
        modelBuilder.Entity<User>()
            .HasIndex(u => u.UserName)
            .IsUnique(); // 用户名设置唯一索引
    }
}

数据库迁移

定义好实体类和上下文后,需要通过迁移命令将实体结构同步到数据库。在命令行中执行以下命令:

# 添加迁移记录,InitialCreate是迁移名称
dotnet ef migrations add InitialCreate
# 执行迁移,创建数据库和表
dotnet ef database update

执行完成后,数据库中会自动创建TestDb数据库和Users表,表结构会和User实体类的定义一致。

基础增删改查操作

新增数据

新增数据只需要创建实体对象,添加到DbSet中,然后调用SaveChanges方法即可:

using (var context = new AppDbContext())
{
    // 创建新用户对象
    var newUser = new User
    {
        UserName = "张三",
        Age = 25
    };
    // 添加到Users集合
    context.Users.Add(newUser);
    // 保存到数据库,返回受影响的行数
    int result = context.SaveChanges();
    if (result > 0)
    {
        Console.WriteLine("新增用户成功,用户ID:" + newUser.Id);
    }
}

查询数据

EF Core支持LINQ查询,语法和C#的LINQ一致,使用起来非常方便:

using (var context = new AppDbContext())
{
    // 查询所有用户
    var allUsers = context.Users.ToList();
    // 查询年龄大于20的用户
    var adultUsers = context.Users.Where(u => u.Age > 20).ToList();
    // 查询用户名为张三的用户,返回第一个匹配结果
    var targetUser = context.Users.FirstOrDefault(u => u.UserName == "张三");
    if (targetUser != null)
    {
        Console.WriteLine("查询到用户:" + targetUser.UserName);
    }
}

修改数据

修改数据需要先查询到对应的实体,修改属性后调用SaveChanges方法:

using (var context = new AppDbContext())
{
    // 查询要修改的用户
    var user = context.Users.FirstOrDefault(u => u.Id == 1);
    if (user != null)
    {
        // 修改用户年龄
        user.Age = 26;
        // 保存修改
        context.SaveChanges();
        Console.WriteLine("用户年龄修改成功");
    }
}

删除数据

删除数据同样需要先获取实体,然后调用Remove方法,再保存更改:

using (var context = new AppDbContext())
{
    // 查询要删除的用户
    var user = context.Users.FirstOrDefault(u => u.Id == 1);
    if (user != null)
    {
        // 移除实体
        context.Users.Remove(user);
        // 保存更改,执行删除操作
        context.SaveChanges();
        Console.WriteLine("用户删除成功");
    }
}

注意事项

  • 每次执行SaveChanges方法时,EF Core会自动检测实体对象的变化,生成对应的SQL语句执行,不需要手动编写SQL。
  • 如果实体类的结构发生变化,需要重新执行迁移命令,更新数据库结构。
  • 对于大量数据的操作,建议使用批量操作的方式,避免频繁的SaveChanges调用影响性能。
  • 生产环境中不要将数据库连接字符串硬编码在代码中,建议放在配置文件里读取。

C#Entity_FrameworkEF_Core数据库操作修改时间:2026-06-20 13:39:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。