EFCore_DbContext

DbContext实例创建的几种方式

  1. ASP.NET Core中通过服务调用AddDbContext注册依赖注入,具体使用时,直接在构造函数注入DbContext实例。
  2. 最原始的方法直接new()一个新对象,然后using使用。
  3. 服务调用AddDbContextFactory进行依赖注入的注册,具体使用时,在类中注入IDbContextFactory<UrDbContext>实例,使用时调用factory.CreateDbContext。

方法1如图:

  • 在Program.cs中直接注册MyDbContext(注意在DbContext中加入有参构造函数(IDbContextOptions<MyDbContext>).不然会报错):

  • 在构造函数直接注入服务:

 

 

 

 

 

方法2如图:

  • 直接new一个对象

 

  • 在MyDbContext中重写 DbContext基类中的方法

 

  •  或者直接new一个DbContextOptionsBuilder对象,将该对象下的Options传给MyDbContext构造函数,然后传给DbContext

 

 

 

 方法3,如图:

  • 注入IDbContextFactory<MyDbContext>上下文工厂对象,然后 调用CreateDbContext创建。

 

 三种方法区别

1.简单好用,直接注入到使用的类中,问题是不支持多线程使用同一DbDontext实例。

2.直接new相对来说粗暴些,使用时使用using或者dispose去释放,如果想多线程或者并行使用,则需要在各自区域内new一个新对象

3.通过DbContextFactory创建,IDbContextFactory<MyDbContext>本身时单例模式,调用CreateDbContext创建不同的DbContext对象。需要使用using或者dispose释放

DbContext是线程不安全的,异步方法需要在查询是立即await等待结果,并行中可以使用不同实例去操作。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如有问题,请指正。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

posted @ 2022-09-13 23:33  小P扯扯  阅读(1062)  评论(0编辑  收藏  举报