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

环境准备
要使用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