Skip to content

Entity Framework Core DbContext EF Core 数据库上下文

DbContext 是用来跟数据库进行会话的一个类。它提供了下面的一些跟数据库进行通信的API.

  • 管理数据库连接
  • 配置模型,进行模型映射
  • 对数据库进行数据查询
  • 保存数据到数据库
  • 更改跟踪
  • 对象缓存 (同一个DbContext已经查询出来的对象,再次查询不会去数据库查询)
  • 事务管理

正如上一篇看到的哪样,我们需要创建一个自己的MalemaDbContext继承于DbContext 然后里面有一些DbSet<Tentity>的属性。这个刚好就对应到我们数据库当中的表。 数据库的表跟这边的DbSet是一一对应的。

csharp

public DbSet<Student> Students { get; set; }

EF core OnConfiguring

在这个方法里面,我们可以给它配置要使用哪一种类型的数据库。和数据库连接字符串

csharp
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    var connectionString = "Data Source=127.0.0.1;Initial Catalog=MalemaEFCoreExample;Persist Security Info=True;User Id=sa;Password=malema987%^&";
    optionsBuilder.UseSqlServer(connectionString);
}

在实际使用的时候,我们不会在这边设置,而是设在Di里面进行设置

EF core OnModelCreating

同样的我们也可以对DbContext OnModelCreating 方法进行重写. 在这边我们可以使用Fluent API对数据库模型进行配置。

比如如下的代码我们把Student name的长度设置成50

csharp
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Student>().Property(x => x.Name).HasMaxLength(50);
    base.OnModelCreating(modelBuilder);
}

EF core DbContext 的方法

方法说明
Add向 DbContext 添加一个具有已添加状态的新实体并开始跟踪它。 当 SaveChanges() 或 SaveChangesAsync() 被调用时,这个新的实体数据将被插入到数据库中。 不能设置主键,否则会报错
AddAsyncAdd 方法的 Async版。
AddRange向 DbContext 添加一组具有已添加状态的新实体并开始跟踪它。 当 SaveChanges() 或 SaveChangesAsync() 被调用时,这个新的实体数据将被插入到数据库中。
AddRangeAsyncAddRange的 Async版
Attach将一个新的或现有的实体附加到DbContext 并开始跟踪它。 初始状态为 Unchanged。 可以用来做部分更新
AttachRange跟上面一样只是一组
Entry得到 EntityEntry 的信息。主要就是跟踪的一些状态信息
Find使用主键查询.
FindAsyncFind的 Async版
Remove把当前的对象标记为删除状态,当调用 SaveChanges() 的时候这个对象记录)会被从数据库当中删除掉
RemoveRange把一组对象标记为删除状态,当调用 SaveChanges() 的时候这些对象(记录)会被从数据库当中删除掉
SaveChanges跟据跟踪实体的状态 生成相对应的Sql语句,来添加,更新,删除相对应的记录
SaveChangesAsyncSaveChanges 方法的 Async版。
Set生成一个DbSet<TEntity>. 我们可以用这个DbSet来进行操作。
Update开始跟踪这个实体,有主键ID,在调用SaveChanges() 会更新所有的字段,没有则会添加。主键数据库不存在会出错
UpdateRange跟上面的方法类似,只不过是跟踪一堆实体。
OnConfiguring配置数据库类型,和数据库连接字符串 ,日志等
OnModelCreating使用Fluent Api 对数据库模型进行配置

DbContext 的属性 Properties

方法
ChangeTracker提供DbContext正在跟踪的实体实例的信息和操作的访问。
Database提供数据库相关信息和操作的访问。
Model返回有关实体形状、它们之间的关系以及它们如何映射到数据库的元数据。

简单就是美