DbContext 是用来跟数据库进行会话的一个类。它提供了下面的一些跟数据库进行通信的API.
正如上一篇看到的哪样,我们需要创建一个自己的MalemaDbContext
继承于DbContext
然后里面有一些DbSet<Tentity>
的属性。这个刚好就对应到我们数据库当中的表。
数据库的表跟这边的DbSet是一一对应的。
public DbSet<Student> Students { get; set; }
在这个方法里面,我们可以给它配置要使用哪一种类型的数据库。和数据库连接字符串
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里面进行设置
同样的我们也可以对DbContext OnModelCreating
方法进行重写. 在这边我们可以使用Fluent API对数据库模型进行配置。
比如如下的代码我们把Student name的长度设置成50
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().Property(x => x.Name).HasMaxLength(50);
base.OnModelCreating(modelBuilder);
}
方法 | 说明 |
---|---|
Add | 向 DbContext 添加一个具有已添加状态的新实体并开始跟踪它。 当 SaveChanges() 或 SaveChangesAsync() 被调用时,这个新的实体数据将被插入到数据库中。 不能设置主键,否则会报错 |
AddAsync | Add 方法的 Async版。 |
AddRange | 向 DbContext 添加一组具有已添加状态的新实体并开始跟踪它。 当 SaveChanges() 或 SaveChangesAsync() 被调用时,这个新的实体数据将被插入到数据库中。 |
AddRangeAsync | AddRange的 Async版 |
Attach | 将一个新的或现有的实体附加到DbContext 并开始跟踪它。 初始状态为 Unchanged。 可以用来做部分更新 |
AttachRange | 跟上面一样只是一组 |
Entry | 得到 EntityEntry 的信息。主要就是跟踪的一些状态信息 |
Find | 使用主键查询. |
FindAsync | Find的 Async版 |
Remove | 把当前的对象标记为删除状态,当调用 SaveChanges() 的时候这个对象记录)会被从数据库当中删除掉 |
RemoveRange | 把一组对象标记为删除状态,当调用 SaveChanges() 的时候这些对象(记录)会被从数据库当中删除掉 |
SaveChanges | 跟据跟踪实体的状态 生成相对应的Sql语句,来添加,更新,删除相对应的记录 |
SaveChangesAsync | SaveChanges 方法的 Async版。 |
Set | 生成一个DbSet |
Update | 开始跟踪这个实体,有主键ID,在调用SaveChanges() 会更新所有的字段,没有则会添加。主键数据库不存在会出错 |
UpdateRange | 跟上面的方法类似,只不过是跟踪一堆实体。 |
OnConfiguring | 配置数据库类型,和数据库连接字符串 ,日志等 |
OnModelCreating | 使用Fluent Api 对数据库模型进行配置 |
方法 | |
---|---|
ChangeTracker | 提供DbContext正在跟踪的实体实例的信息和操作的访问。 |
Database | 提供数据库相关信息和操作的访问。 |
Model | 返回有关实体形状、它们之间的关系以及它们如何映射到数据库的元数据。 |