IOCAutofac与ORMEntityFramwork的联系--单例模式
在你阅读之前默认你已经理解了IOC、DI、ORM以及autofac和EF的使用
在我最近写项目的时候我在单步调试时偶然发现的一个问题
先说明我的项目使用.NET MVC 三层架构,运用IOC Autofac工具和EntityFramework6
对于IOC Autofac不理解的可以去看我的博客:https://www.cnblogs.com/sandaman2019/p/11273366.html
对于EntityFramework6不理解的可以去看这个文章:https://www.cnblogs.com/wujingtao/category/816531.html
在使用IOC的时候进入单步调试项目时,IOC注册进容器时会获取实体类中的db上下文对象
可以看到我的_dbcontext是由一个dbcontext单例模式创建的!
那么为什么要用这个?在IOC执行时会扫描你对应的注册接口和实现类,实现类中的对于实体的操作,就需要dbcontext上下文对象
那么这个上下文对象怎么找,首先他会找到你的实体类,找到对应的实体模型类去检索上下文独享,确保有一个dbcontext对象可以去执行后续的操作
这就是对EF的请求操作,如果不通过工厂去实现就会造成同一次请求可能包含对数据库的不同操作,其他的EF对象内获取的数据可能已经是过时的,
如果不保证同一个请求中使用同一个EF上下文对象,事务工作单元模式将无法实现。而且可能造成数据混乱。
单例模式的构建对象会造成线程的不安全使用,多个对象共享一个线程池,导致线程阻塞进而引发很大的后果!
可以看到我的注释,当然你可以忽略这个实体Entities!
IOC和EF使用就必须要注意上下文的线程实例,不然会操作不恰当的事务提交!可能会造成数据被脏读,脏操作
最新文章
- effective c++ resources
- string(Integer)类的equals和==区别和联系(验证密码的时候用得到)
- 浅析dex文件加载机制
- Codeforces Gym 100286G Giant Screen 水题
- Windows中APACHE开启fastcgi后无法连接数据库
- Microsoft Dynamics CRM2011 更换Logo
- 找Maven -->; pom.xml -->; groupId和artifactId的网站
- MVC4程序运行报错
- 自学Linux Shell12.5-while、until命令
- HDU 3761 炸碉堡【半平面交(nlogn)】+【二分】
- 使用natapp将本地服务映射到外网
- ajax 跨域请求没有带上cookie 解决办法
- 西门子S7系列PLC的主要种类及应用软件
- Linux之Ubuntu中的安装应用
- ELM327 OBD to RS232 Interpreters
- HDU1069 Monkey and Banana
- Django视图系统
- LBS 附近的人
- 看外设(uart/spis/i2c/i2s)模块设计
- arduino 字符解析