C# Entity Framework Core Code First模式怎么入门实战

来源:AI视频音频作者:南京SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《C# Entity Framework Core Code First模式怎么入门实战》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C# Entity Framework Core Code First模式怎么入门实战》有用,将其分享出去将是对创作者最好的鼓励。

Entity Framework Core的Code First模式是C#开发中常用的数据库构建方式,开发者只需要编写业务对应的实体类和数据库上下文,就可以让框架自动生成匹配的数据库表结构,不需要手动编写SQL建表语句,非常适合快速迭代的开发场景。

环境准备

首先需要在项目中安装Entity Framework Core的相关依赖包,以.NET 6及以上版本的控制台项目为例,通过NuGet安装以下两个核心包:

  • Microsoft.EntityFrameworkCore.SqlServer:用于连接SQL Server数据库
  • Microsoft.EntityFrameworkCore.Tools:用于执行数据库迁移命令

定义实体类

实体类对应数据库中的表,类的属性对应表的字段,我们先定义两个简单的业务实体:用户表和订单表,两者存在一对多的关联关系。

// 用户实体,对应数据库中的Users表
public class User
{
    // 主键,EF Core默认会将Id或类名+Id的属性作为主键
    public int Id { get; set; }
    // 用户名,后续会配置长度约束
    public string UserName { get; set; }
    // 用户邮箱
    public string Email { get; set; }
    // 导航属性,一个用户可以有多个订单
    public List<Order> Orders { get; set; }
}

// 订单实体,对应数据库中的Orders表
public class Order
{
    public int Id { get; set; }
    // 订单金额
    public decimal Amount { get; set; }
    // 下单时间
    public DateTime CreateTime { get; set; }
    // 外键,关联用户表的主键
    public int UserId { get; set; }
    // 导航属性,订单属于一个用户
    public User User { get; set; }
}

配置数据库上下文

数据库上下文是Entity Framework Core操作数据库的核心类,需要继承DbContext,并在其中配置实体集合和数据库连接信息。

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    // 定义实体对应的DbSet,每个DbSet对应一张数据库表
    public DbSet<User> Users { get; set; }
    public DbSet<Order> Orders { get; set; }

    // 配置数据库连接字符串,这里使用SQL Server本地实例
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=localhost;Database=EFCoreCodeFirstDemo;Trusted_Connection=True;TrustServerCertificate=True");
    }

    // 配置实体的额外规则,比如字段长度、外键关系等
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 配置User实体的UserName字段最大长度为50,且不能为空
        modelBuilder.Entity<User>()
            .Property(u => u.UserName)
            .HasMaxLength(50)
            .IsRequired();

        // 配置User实体的Email字段最大长度为100
        modelBuilder.Entity<User>()
            .Property(u => u.Email)
            .HasMaxLength(100);

        // 配置Order和User的一对多关系,级联删除规则为当用户删除时,关联的订单也删除
        modelBuilder.Entity<Order>()
            .HasOne(o => o.User)
            .WithMany(u => u.Orders)
            .HasForeignKey(o => o.UserId)
            .OnDelete(DeleteBehavior.Cascade);
    }
}

执行数据库迁移

实体类和上下文配置完成后,就可以通过迁移命令生成数据库表结构了,打开NuGet包管理器控制台,依次执行以下命令:

首先创建初始迁移文件:

Add-Migration InitialCreate

执行完成后,项目会生成一个Migrations文件夹,里面包含迁移的快照和具体的表结构变更逻辑。接着执行更新数据库命令,将迁移应用到数据库:

Update-Database

执行成功后,打开SQL Server管理器,可以看到已经自动创建了EFCoreCodeFirstDemo数据库,以及Users和Orders两张表,表结构和我们定义的实体类、配置规则完全一致。

基础增删改查操作

数据库生成后,就可以通过上下文操作数据了,以下是常见的增删改查示例:

class Program
{
    static void Main(string[] args)
    {
        using (var context = new AppDbContext())
        {
            // 新增用户
            var newUser = new User
            {
                UserName = "张三",
                Email = "zhangsan@ipipp.com",
                Orders = new List<Order>
                {
                    new Order { Amount = 199.9m, CreateTime = DateTime.Now },
                    new Order { Amount = 299.9m, CreateTime = DateTime.Now.AddDays(1) }
                }
            };
            context.Users.Add(newUser);
            context.SaveChanges();
            Console.WriteLine($"新增用户成功,用户Id为:{newUser.Id}");

            // 查询用户
            var user = context.Users.FirstOrDefault(u => u.UserName == "张三");
            if (user != null)
            {
                Console.WriteLine($"查询到用户:{user.UserName},邮箱:{user.Email}");
                // 加载关联的订单数据
                context.Entry(user).Collection(u => u.Orders).Load();
                Console.WriteLine($"该用户的订单数量:{user.Orders.Count}");
            }

            // 修改用户
            if (user != null)
            {
                user.Email = "zhangsan_new@ipipp.com";
                context.SaveChanges();
                Console.WriteLine("用户邮箱修改成功");
            }

            // 删除用户,由于配置了级联删除,关联的订单也会被删除
            if (user != null)
            {
                context.Users.Remove(user);
                context.SaveChanges();
                Console.WriteLine("用户删除成功,关联的订单也已被删除");
            }
        }
    }
}

后续实体变更处理

如果后续需要新增实体或者修改现有实体的结构,比如给User类新增一个年龄字段,只需要修改实体类后,再次执行迁移命令:

Add-Migration AddUserAge
Update-Database

Entity Framework Core会自动对比之前的迁移快照,生成对应的表结构变更脚本,不需要手动修改数据库。

Entity_Framework_CoreCode_FirstC#数据库迁移实体类修改时间:2026-06-13 17:33:42

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