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 @   小P扯扯  阅读(1078)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示