Entity Framework Core怎么执行增删改查 EF Core CRUD操作方法

来源:这里教程网 时间:2026-02-21 17:35:44 作者:

Entity Framework Core 执行增删改查(CRUD)核心靠 DbSetDbContext 配合异步方法完成,不需要手写 SQL,但需注意上下文生命周期、实体状态和保存时机。

创建实体与数据库上下文

先定义一个简单模型类(如

Product
),再继承
DbContext
创建上下文类:

实体类中主键建议用
[Key]
显式标注,或按命名约定(如
Id
ProductId
)自动识别
上下文类中声明
DbSet<t></t>
属性,EF Core 会自动映射为数据表
若需精细控制字段(长度、是否为空、列名等),可用数据注解(
[Required]
[MaxLength(100)]
[Column("product_name")]
)或 Fluent API 配置

注册并初始化 DbContext

在 ASP.NET Core 中,必须将上下文注册进 DI 容器,并指定数据库提供程序:

Program.cs
(.NET 6+)中调用
builder.Services.AddDbContext<appdbcontext>(opt => opt.UseSqlServer(connStr))</appdbcontext>
连接字符串写在
appsettings.json
ConnectionStrings
节点下
控制台或非 Web 场景可直接 new 上下文,但需手动传入
DbContextOptions

执行增删改查操作

所有操作都通过

DbContext
实例的
DbSet
属性发起,推荐使用异步方法(
ToListAsync
SaveChangesAsync
等):

查(Read):用 LINQ 查询,如
context.Products.Where(p => p.Price > 100).ToListAsync()
;主键查询优先用
FindAsync(id)
(性能更好,且会检查本地缓存)
增(Create):调用
context.Products.Add(entity)
AddRange
,再执行
await context.SaveChangesAsync()
删(Delete):可用
context.Products.Remove(entity)
(实体已加载),或先
FindAsync
再删;也可用“仅主键实体”方式:
context.Products.Attach(new Product { Id = 123 }); context.Products.Remove(entity);
改(Update):最安全方式是先查出来,改属性,再
SaveChangesAsync
;若只想更新部分字段,可用
Entry(entity).Property(e => e.Name).IsModified = true
显式标记

注意事务与上下文作用域

单次

SaveChangesAsync
默认自带事务,多个操作需原子性时可显式使用
Database.BeginTransaction()
;Web 应用中,推荐每个请求一个上下文(Scoped 生命周期),避免跨请求复用或长时间持有。

基本上就这些。不复杂但容易忽略细节,比如没调

SaveChangesAsync
就以为数据已入库,或者 Attach 后状态没设对导致更新失败。

相关推荐