EF学习笔记(一)
DbContext 类
DbContext是实体类和数据库之间的桥梁,DbContext主要负责与数据交互,主要作用:
1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。
2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。
3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。
4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。
DbContext中的DbSet
DbSet表示上下文中指定类型的所有实体的集合或可从数据库中查询的指定类型的所有实体的集合。
DbContext方法
Method | Usage |
---|---|
Add | 将一个新实体添加到具有添加状态的DbContext中,并开始对其进行跟踪。调用SaveChanges()时,会将新的实体数据插入数据库。 |
AddAsync | 用于向状态为“已添加”的DbContext添加新实体并开始对其进行跟踪的异步方法。调用SaveChangesAsync()时,会将新的实体数据插入数据库。 |
AddRange | 将具有添加状态的新实体集合添加到DbContext并开始对其进行跟踪。调用SaveChanges()时,会将新的实体数据插入数据库。 |
AddRangeAsync | 用于添加将保存在SaveChangesAsync()上的新实体集合的异步方法。 |
Attach | 将新的或现有的实体附加到状态不变的DbContext并开始跟踪它。 |
AttachRange | AttachRange将新实体或现有实体的集合以未更改的状态附加到DbContext并开始对其进行跟踪。 |
Entry | 获取给定实体的EntityEntry。该条目提供对实体的更改跟踪信息和操作的访问。 |
Find | 查找具有给定主键值的实体。 |
FindAsync | 用于查找具有给定主键值的实体的异步方法。 |
Remove | 移除将删除状态设置为指定的实体,当调用SaveChanges()时,该实体将删除数据。 |
RemoveRange | 将Deleted状态设置为一组实体,这些实体将在调用SaveChanges()时在一次数据库往返中删除数据。 |
SaveChanges | 对状态为“已添加”,“已修改”或“已删除”的实体执行INSERT,UPDATE或DELETE命令到数据库。 |
SaveChangesAsync | SaveChanges()的异步方法 |
Set | Set创建一个DbSet ,可用于查询和保存TEntity的实例。 |
Update | 附加状态为“已修改”的断开连接的实体,并开始对其进行跟踪。调用SaveChagnes()时将保存数据。 |
UpdateRange | 附加状态为“已修改”的断开连接的实体的集合,并开始对其进行跟踪。调用SaveChagnes()时将保存数据。 |
OnConfiguring | 重写此方法,以配置要用于此上下文的数据库(和其他选项)。创建的上下文的每个实例都会调用此方法。 |
OnModelCreating | 重写此方法,以进一步配置根据约定从派生上下文的DbSet 属性中公开的实体类型发现的模型。 |
EF中的跟踪状态:
Detached:实体未被 DbContext 跟踪, 如刚new的实体,可以通过Attach()添加到上下文,此时状态为unchanged。。
Added:添加状态,一般执行Add/AddRange时标记为added。因为新对象在数据库中没有记录,所以不能转为deleted和modified状态。当调用SaveChanges后将修改其状态并将实体插入到数据库。
UnChanged:实体存在数据库中,实体自从数据库中查询以来没有进行更改, 从查询返回的所有实体最初都处于此状态,当调用SaveChanges后将忽略。
Modified:修改状态,改变了实体的属性会处于这个状态,能转为deleted状态,不能转换为added状态。实体自从数据库中查询以来已进行更改,当调用SaveChanges后将更改其状态并更新数据持久化到数据库。
Deleted:删除状态,一般执行Remove/RemoveRange时标记为deleted,不能转换为added状态。实体存在数据库中,当调用SaveChanges方法后将删除实体。