zoukankan      html  css  js  c++  java
  • 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上下文对象

    RQ~M@YRZS~}G0BET2QGO9)6.png

    可以看到我的_dbcontext是由一个dbcontext单例模式创建的!

    那么为什么要用这个?在IOC执行时会扫描你对应的注册接口和实现类,实现类中的对于实体的操作,就需要dbcontext上下文对象

    那么这个上下文对象怎么找,首先他会找到你的实体类,找到对应的实体模型类去检索上下文独享,确保有一个dbcontext对象可以去执行后续的操作

    这就是对EF的请求操作,如果不通过工厂去实现就会造成同一次请求可能包含对数据库的不同操作,其他的EF对象内获取的数据可能已经是过时的,

    如果不保证同一个请求中使用同一个EF上下文对象,事务工作单元模式将无法实现。而且可能造成数据混乱。

    单例模式的构建对象会造成线程的不安全使用,多个对象共享一个线程池,导致线程阻塞进而引发很大的后果!

    MM0M4TVWY(TTBW03W2JI56A.png

    可以看到我的注释,当然你可以忽略这个实体Entities!

    IOC和EF使用就必须要注意上下文的线程实例,不然会操作不恰当的事务提交!可能会造成数据被脏读,脏操作

  • 相关阅读:
    python开源项目
    Appscan 10用户安装手册
    20201201-k8s的node节点和独立nginx部署会冲突
    k8s-更换证书(apiserver新添加了VIP)
    20201224-修改pod网段(calico)
    深-宝的一梦
    洛谷-P3383 【模板】线性筛素数
    洛谷-P3913 车的攻击
    洛谷-P1866 编号
    洛谷-P1100 高低位交换
  • 原文地址:https://www.cnblogs.com/sandaman2019/p/11536449.html
Copyright © 2011-2022 走看看