突然发现 ViewState,Linq 水火不容

刚才在写一个小东西,突然发现一个问题。很奇怪,希望大家能帮忙解决一下

 

我用WebForm+Linq 做一个小网站,在读取数据的时候,我想将Linq 读取出来的泛型集合缓存起来。大家自然想到asp.net中的几个内置对象来存储。其实我也是这样想的。页面内部ViewState 最适合不过了。但是问题出现了。

突然发现 ViewState,Linq 水火不容_第1张图片 

 

这个linq 查询出来的数据竟然和ViewState 水火不容,Linq查询出的结果集竟然不能存入到ViewState 中。

存储代码如下:

代码

 1  public   void  SetGameServer()
 2          {
 3               if  (ViewState[ " listServer " !=   null )
 4              {
 5                  listServer  =  ViewState[ " listServer " as  IList < TabGameLink > ;
 6              }
 7               else
 8              {
 9                  TabGameLinkDAL access  =   new  TabGameLinkDAL();
10                  listServer  =  access.GetTabGameLinkList( 4 1 );
11                   if  (listServer  ==   null )
12                  {
13                      listServer  =   new  List < TabGameLink > ();
14                  }
15                   // ViewState["listServer"] = listServer;
16                  Session[ " listServer " =  listServer;
17              }
18          }

 

 上面的代码我已经使用session 来存储了,后台的Linq 查询方式如下:

代码
public  IList < TabGameLink >  GetTabGameLinkList( int  gameID,  int  typeID)
        {
            eBrainWebDbDataContext context 
=   new  eBrainWebDbDataContext(Conn);
            
return  context.TabGameLink.Where(l  =>  l.GameID  ==  gameID  &&  l.TypeID  ==  typeID).OrderByDescending(l  =>  l.CreateTime).ToList < TabGameLink > ();
        }

 

 

自己分析了一下上面的问题:

(1)上面的错误是"System.Data.Linq.ChangeTracker..... 未标记为可序列化" ,标记为不可序列化,但是默认情况Linq 生存的实体是可以序列化的。假设不能序列化,但是我已经手动给实体加了[Serializable],按照道理应该不会出现这样的问题。

 (2)  以前记得ViewState 中存储List<T> 集合似乎是没有问题的,而且自己刚才也试过了,是没有问题的。偏偏Linq 查询的结果就不能存入到ViewState中。是ViewState 对Linq 有偏见,真是这样那么微软对他们的关系就没有调节好了,可以算得上是一个bug了。

 

就是不明白ViewState 的存储数据的原理,导致他们水火不容。希望大家帮帮忙,看看这两个家伙是咋回事。你看Session存储就偏偏没事,但是我们不能说总用Session来存储吧,我只是单个页面存储,不需要跨页面。大家有什么解决办法,留个言。帮我解决一下

 

 

你可能感兴趣的:(LINQ)