EFCore_DbContext
DbContext实例创建的几种方式
- ASP.NET Core中通过服务调用AddDbContext注册依赖注入,具体使用时,直接在构造函数注入DbContext实例。
- 最原始的方法直接new()一个新对象,然后using使用。
- 服务调用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等待结果,并行中可以使用不同实例去操作。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如有问题,请指正。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------