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等待结果,并行中可以使用不同实例去操作。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如有问题,请指正。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言