Lose.zhang 发表于 2012-12-29 11:25:51

LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对

<div id="cnblogs_post_body">在linq to sql作为底层数据源时,我们进行一个linq返回结果集的操作,这没有问题,不过,当你进行update操作之后,再使用linq返回结果集时,你会发现,它返回的
信息是不正确的,或者总是发生变化的,这是为何?
事实上,这是由于DataContext本身的机制所决定的,它本身就有缓存机制,当你从数据库把信息得到时,然后修改它,再进行保存,如果你再把信息取出来,这时,你会从datacontext的缓存中得到,而不是真正的数据库里得到,这个datacontext缓存如果想要解决,有几种方法:
1  datacontext不要共享化(不要静态化,不要单例),使用私有datacontext,即每个操作,使用一个新的datacontext。
2  使用派生类,将查询结果保存到实体的子类中,也可以避免这种缓存数据的产生。
下面是具体的代码:
<div class="cnblogs_code"> 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                        selectnew User_Info_Ext10                            {11                            ...12                            };13            return linq;14         }
页: [1]
查看完整版本: LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对