EF中的上下文(DbContext)简介
EF中的上下文(DbContext)简介
DbContext是实体类和数据库之间的桥梁, DbContext主要负责与数据交互,主要作用:
1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。
2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。
3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。
4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。
DbContext中的DbSet
DbSet表示上下文中指定类型的所有实体的集合或可从数据库中查询的指定类型的所有实体的集合。
DbSet常用方法
TestDBContext tdb = new TestDBContext();
在EF中实体的五种状态:
1.detached:实体不在上下文的追踪范围内,如刚new的实体,可以通过Attach()添加到上下文,此时状态为unchanged。
2.unchanged:未改变,如刚从数据库读取出来的实体。
3.added:添加状态,一般执行Add/AddRange时标记为added。因为新对象在数据库中没有记录,所以不能转为deleted和modified状态。
4.deleted:删除状态,一般执行Remove/RemoveRange时标记为deleted,不能转换为added状态。
5.modified:修改状态,改变了实体的属性会处于这个状态,能转为deleted状态,不能转换为added状态。
EF如何判断状态
为当前对象(需要追踪的)创建一个DbEntityEntry对象,此对象包含:
Current Value(当前值)/Original Value(原始值)/Database Value(数据库里的值)
只需要比较这三个值,很容易就知道哪些属性被修改了。
设置context.Configuration.AutoDetectChangesEnabled = false则不会去追踪,默认是true。
也可以自己指定状态:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!