zoukankan      html  css  js  c++  java
  • LINQtoSQL那点事~LINQtoSQL中的数据缓存与应对

    在linq to sql作为底层数据源时,我们进行一个linq返回结果集的操作,这没有问题,不过,当你进行update操作之后,再使用linq返回结果集时,你会发现,它返回的

    信息是不正确的,或者总是发生变化的,这是为何?

    事实上,这是由于DataContext本身的机制所决定的,它本身就有缓存机制,当你从数据库把信息得到时,然后修改它,再进行保存,如果你再把信息取出来,这时,你会从datacontext的缓存中得到,而不是真正的数据库里得到,这个datacontext缓存如果想要解决,有几种方法:

    1  datacontext不要共享化(不要静态化,不要单例),使用私有datacontext,即每个操作,使用一个新的datacontext。

    2  使用派生类,将查询结果保存到实体的子类中,也可以避免这种缓存数据的产生。

    下面是具体的代码:

    
    
     1         /// <summary>
     2         /// 需要把Join的表关系写在这里
     3          /// </summary>
     4          /// <returns></returns>
     5          public IQueryable<User_Info> GetDetailModel()
     6          {
     7              var linq = from data1 in base.GetModel<User_Info>()
     8                        join data2 in base.GetModel<User_Profile>() on data1.UserID equals data2.UserID
     9                        select  new User_Info_Ext
    10                            {
    11                              ...
    12                            };
    13            return linq;
    14         }
    
    

    我们无法想像把所有查询操作都放在DATA层代码会变得什么样,所以,有时,我们更多的时候需要去创建一种线程安全的,单例的数据上下文对象,这就是我一直
    用的dataContext工厂,通过工厂去动态创建DataContext实例,通过lock和thread来实现单线程共享及线程安全的数据上下文对象,更多DataContext知识,
    可以访问我的这篇文章

  • 相关阅读:
    Factorial Trailing Zeroes
    Convert Integer A to Integer B
    函数防抖、函数节流
    localstorage sessionstorage和cookie的区别
    element中表格中的表头与表格内容边框错位的解决方法
    解决Minio生成图片文件的分享链接无法正常下载的问题
    gin编写后端API的使用技巧
    YOLOV5源码解读-export.py网络结构、配置文件
    《三、YOLOV3细节原理全解析》
    《二、YOLOV2细节原理全解析》
  • 原文地址:https://www.cnblogs.com/lori/p/2659323.html
Copyright © 2011-2022 走看看