博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
appfabric cache存储ef 查询结果的bug
阅读量:6228 次
发布时间:2019-06-21

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

首先是表结构,一个一对多的关系,和一个单独的表来做测试

 

 
1: var db = new TestDBEntities();
2: var obj1 = db.tab1.FirstOrDefault();
3: var list1 = db.tab1.ToList();
4:
5: var user1 = db.Users.FirstOrDefault();
6: var userlist = db.Users.ToList();
7:
8: var order1 = db.Orders.FirstOrDefault();
9: var orderlist = db.Orders.ToList();
10:
11:
12: cache.Put("obj1", obj1);
13: Console.WriteLine("单独表个体");
14: cache.Put("list1", list1);
15: Console.WriteLine("单独表list");
16:
17: cache.Put("user1", user1);
18: Console.WriteLine("user表个体");
19: cache.Put("userlist", userlist);
20: Console.WriteLine("user表list");
21:
22: cache.Put("order1", order1);
23: Console.WriteLine("order表个体");
24: cache.Put("orderlist", orderlist);
25: Console.WriteLine("order表list");

查出来,放入cache,貌似没什么问题

但是如果用下面的写法

 
1: tab1 obj1;
2: List
list1;
3: Users user1;
4: List
userlist;
5: Orders order1;
6: List
orderlist;
7: using (var db = new TestDBEntities())
8: {
9:     db.tab1.MergeOption = System.Data.Objects.MergeOption.NoTracking;
10:     db.Users.MergeOption = System.Data.Objects.MergeOption.NoTracking;
11:     db.Orders.MergeOption = System.Data.Objects.MergeOption.NoTracking;
12:     obj1 = db.tab1.FirstOrDefault();
13:     list1 = db.tab1.ToList();
14:     user1 = db.Users.FirstOrDefault();
15:     userlist = db.Users.ToList();
16:     order1 = db.Orders.FirstOrDefault();
17:     orderlist = db.Orders.ToList();
18: }
19:
20: cache.Put("obj1", obj1);
21: Console.WriteLine("单独表个体");
22: cache.Put("list1", list1);
23: Console.WriteLine("单独表list");
24:
25: cache.Put("user1", user1);
26: Console.WriteLine("user表个体");
27: cache.Put("userlist", userlist);
28: Console.WriteLine("user表list");
29:
30: cache.Put("order1", order1);
31: Console.WriteLine("order表个体");
32: cache.Put("orderlist", orderlist);
33: Console.WriteLine("order表list");

 

 

 

两种写法的区别在于

1、使用了using,关闭数据连接

2、使用了notracking,或者使用

order1 = db.CreateObjectSet
().FirstOrDefault();

这种泛型形式

Orders关联的Users是唯一的。此时,会报这个错误。

注意,只有在一对多关系的多方放入缓存时,他要获取一那方的数据时会出错

一方放入,对应多方是集合,不会报错

 

猜测:大概是在序列化的时候会进行访问

目前未找到什么通过配置cache能解决的方法。

using,notracking,或泛型形式,都是在分层下经常使用的。

 

最让我无语的是,同样的东西放到memcache里一点事都没有。真shit。

参考memcache client,是做了二进制序列化,自己进行而进制序列化也不会有问题,不知道appfabric采用的是什么形式。

 

已找到问题的原因,

转载于:https://www.cnblogs.com/czcz1024/archive/2012/03/15/2397444.html

你可能感兴趣的文章
MAC 设置环境变量path的几种方法
查看>>
JVM垃圾收集器(2)
查看>>
SpringBoot之hello world!
查看>>
Socket拆包和解包
查看>>
工作之忠、智、勇
查看>>
电子书下载:Beginning Nokia Apps Development: Using MeeGo, Mobile QT and OpenSymbian
查看>>
mysql 5.0存储过程学习总结
查看>>
matlab练习程序(Ritter‘s最小包围圆)
查看>>
SQL存储过程教程
查看>>
最详细的临时表,表变量的对比
查看>>
C#中直接打印Report文件(rdlc)
查看>>
C 温故知新 之 指针:基本概念&变量的指针和指向变量的指针
查看>>
引用计数
查看>>
C#:XML操作类 (转)
查看>>
struts2 API chm帮助文档生成介绍说明(转)
查看>>
ORACLE数据缓冲区DB cache
查看>>
数据字典统一管理,动态下拉框
查看>>
不让自己的应用程序在桌面的图标列表里启动显示的方法
查看>>
矩阵的坐标变换(转)
查看>>
汽车常识全面介绍 - 引擎详论
查看>>