zoukankan      html  css  js  c++  java
  • MVC学习日记-实现一个EF容器管理一个数据库中的多个表

      今天在MVC下开发企业网站的时候,发现了个小问题,就是在Dal层中的BaseDal中初始化了EF容器,那么问题就来了,当我们操作不同的表时,那么每个表都会调用BaseDal,然后new一个EF容器,因此若是有10个表,那么就要new10个EF容器,这是不合理的,因为每个表都要new一个EF容器,首先浪费内存,还有线程访问时,每次都要去内存中查找指定的EF容器,消耗了时间,降低了程序的性能,

      解决办法:将EF容器作为属性定义,在第一次访问时,创建EF容器对象,同时调用System.Runtime.Remoting.Message.CallContext类中的SetData方法将EF容器对象通过<key,value>保存到缓存中

    代码如下:

     1        public BaseDbContext db
     2        {
     3            get
     4            {
     5                //GetData方法:每次进来都先获取EF容器再判断
     6              object efContext=System.Runtime.Remoting.Messaging.CallContext.GetData(typeof(BaseDbContext).FullName);
     7              if (efContext == null)
     8                {
     9                    BaseDbContext _db = new BaseDbContext();
    10                  //通过key和value的方式保存到缓存中
    11                    System.Runtime.Remoting.Messaging.CallContext.SetData(typeof(BaseDbContext).FullName, _db);
    12                  //把_db容器对象赋值给efcontetx,那么下次进来就不用new了
    13                    efContext = _db;
    14              }
    15                //不为空则强转为BaseContext形式输出
    16              return efContext as BaseDbContext;
  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/jean69/p/3631956.html
Copyright © 2011-2022 走看看