博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对
阅读量:5869 次
发布时间:2019-06-19

本文共 1146 字,大约阅读时间需要 3 分钟。

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

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

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

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

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

下面是具体的代码:

 
1         ///  2         /// 需要把Join的表关系写在这里 3          ///  4          /// 
5 public IQueryable
GetDetailModel() 6 { 7 var linq = from data1 in base.GetModel
() 8 join data2 in base.GetModel
() on data1.UserID equals data2.UserID 9 select new User_Info_Ext10 {11 ...12 };13 return linq;14 }
 
我们无法想像把所有查询操作都放在DATA层代码会变得什么样,所以,有时,我们更多的时候需要去创建一种线程安全的,单例的数据上下文对象,这就是我一直 用的dataContext工厂,通过工厂去动态创建DataContext实例,通过lock和thread来实现单线程共享及线程安全的数据上下文对象,更多DataContext知识, 可以访问。

转载于:https://www.cnblogs.com/lori/archive/2012/08/27/2659323.html

你可能感兴趣的文章
listview当选中某一个item时设置背景色其他的不变
查看>>
Eclipse Indigo 3.7 中文字体偏小解决方案: Consolas 微软雅黑混合字体!
查看>>
Hive 0.11 升级踩坑记——HiveServer2的imperson问题
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
Spring MVC常用注解说明
查看>>
CetOS(RHEL) 5.3下网卡绑定设置指南
查看>>
在Javascript中闭包(Closure)
查看>>
omap_hwmod: rtc: doesn't have mpu register target
查看>>
Linux执行ls,会引起哪些系统调用
查看>>
Linux 32位系统支持4G以上内存
查看>>
记录一些有用的代码技巧,不定期更新
查看>>
打造全民健康平台 加速实现智慧医疗
查看>>
集成商聚焦
查看>>
CentOS5.8配置×××服务器
查看>>
Monkey测试
查看>>
2014-8-10 北漂三周年
查看>>
tornado 服务器 - 读写2进制rest请求
查看>>
IBM is still thinking!
查看>>
我的友情链接
查看>>
kafka 常用命令与问题(持续更新)
查看>>