LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对
2012-08-27 22:44
323 查看
在linq to sql作为底层数据源时,我们进行一个linq返回结果集的操作,这没有问题,不过,当你进行update操作之后,再使用linq返回结果集时,你会发现,它返回的
信息是不正确的,或者总是发生变化的,这是为何?
事实上,这是由于DataContext本身的机制所决定的,它本身就有缓存机制,当你从数据库把信息得到时,然后修改它,再进行保存,如果你再把信息取出来,这时,你会从datacontext的缓存中得到,而不是真正的数据库里得到,这个datacontext缓存如果想要解决,有几种方法:
1 datacontext不要共享化(不要静态化,不要单例),使用私有datacontext,即每个操作,使用一个新的datacontext。
2 使用派生类,将查询结果保存到实体的子类中,也可以避免这种缓存数据的产生。
下面是具体的代码:
信息是不正确的,或者总是发生变化的,这是为何?
事实上,这是由于DataContext本身的机制所决定的,它本身就有缓存机制,当你从数据库把信息得到时,然后修改它,再进行保存,如果你再把信息取出来,这时,你会从datacontext的缓存中得到,而不是真正的数据库里得到,这个datacontext缓存如果想要解决,有几种方法:
1 datacontext不要共享化(不要静态化,不要单例),使用私有datacontext,即每个操作,使用一个新的datacontext。
2 使用派生类,将查询结果保存到实体的子类中,也可以避免这种缓存数据的产生。
下面是具体的代码:
/// <summary> /// 需要把Join的表关系写在这里 /// </summary> /// <returns></returns> public IQueryable<User_Info> GetDetailModel() { var linq = from data1 in base.GetModel<User_Info>() join data2 in base.GetModel<User_Profile>() on data1.UserID equals data2.UserID select new User_Info_Ext { ... }; return linq; }
我们无法想像把所有查询操作都放在DATA层代码会变得什么样,所以,有时,我们更多的时候需要去创建一种线程安全的,单例的数据上下文对象,这就是我一直 用的dataContext工厂,通过工厂去动态创建DataContext实例,通过lock和thread来实现单线程共享及线程安全的数据上下文对象,更多DataContext知识, 可以访问我的这篇文章。
相关文章推荐
- LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对
- LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- 步步为营VS 2008 + .NET 3.5(13) - DLINQ(LINQ to SQL)之用户自定义函数、在不同的DataContext之间做更新、缓存、获取信息、数据加载选项和延迟加载
- [导入]Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)
- Linq to Sql 更新数据时容易忽略的问题
- 强大的DataGrid组件[3]_数据交互之Linq to SQL——Silverlight学习笔记[11]
- 使用LINQ to SQL将数据从一个数据库复制到另一个数据库
- VB.NET中使用Linq TO SQL添加数据后获得自增长列ID
- ADO.NET Entity Framework beta 3 和Linq to SQL 在缓存处理上的不同
- LINQ to SQL 动态数据支持
- Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)
- linq to sql更改数据
- 使用 LINQ To SQL 和实体框架实现灵活的数据访问
- Linq to sql:使用存储过程新增数据
- linq to sql中的自动缓存(对象跟踪)
- MVC4 用Linq to SQL创建数据模型
- 【十天学会Linq to sql】第三天—–数据查询