首页 新闻 会员 周边 捐助

entity framework 缓存干扰的数据不一致问题

0
悬赏园豆:20 [已解决问题] 解决于 2015-03-27 16:49

http://www.cnblogs.com/sunrack/archive/2010/05/24/1742525.html,碰到和这个一样的情况,

var poday = db.PoDays.Where(o => o.PoDate == date).FirstOrDefault();

/*假如查询出来poday.PoDayId=8* /
poday.PoDayId = poday.PoDayId + 1;

/*现在poday.PoDayId加1后=9* /

手动修改数据库podayid=100
var bbb = db.PoDays.Where(o => o.PoDate == date).FirstOrDefault();
查看执行的sql,返回的podayid=100,但是bbb.podayid=9;

entity framework 6.0版本不知道能不能设置MergeOption。

jsonliu的主页 jsonliu | 初学一级 | 园豆:86
提问于:2015-03-27 16:08
< >
分享
最佳答案
0

是重用同一个DbContext实例惹的祸。

创建DbContext开销不大,建议在  var bbb = db.PoDays.Where(o => o.PoDate == date).FirstOrDefault(); 之前创建一个新的DbContext实例给db。

 

收获园豆:20
dudu | 高人七级 |园豆:29568 | 2015-03-27 16:27

我大意了,先前也new了行的DbContext的,不过下面查询的时候没有改成新的,导致我一直以为new了新的DbContext也不管用。

jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:45

谢了

jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:45
其他回答(1)
0

如果数据即时性对你很重要的话,你每次使用一个新的db就行了。保证不会有缓存问题。

using db

{

}

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-03-27 16:11

试过了没用

支持(0) 反对(0) jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:13

@jsonliu: 

你没明白我说的,你怎么试的?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-03-27 16:16

@爱编程的大叔: 

支持(0) 反对(0) jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:18

@jsonliu: 你在哪行代码的时候直接修改的数据库?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-03-27 16:21

@爱编程的大叔: poday.podayid=10,我手动数据库修改podayid=100,db.savechanges()报错,在走while,执行sql查查来的值也是100,但是断点调试,poday.podayid=11,并发标示也未更新,都是第一次走while时候的数据,依次加1

支持(0) 反对(0) jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:23

@爱编程的大叔: 在db.savechanges的时候,修改,然后再执行这行代码报错,走while,然后执行的sql查询的值都是100,并发标示也是最新的,但是程序断点,值是第一次查询的加1,并发标示也没有变

支持(0) 反对(0) jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:25

@jsonliu: 所以说你没明白我说的。

你不能在一个db内部修改数据库值啊。

只要你手工修改数据库后,再NEW 一个DB,怎么都不会有问题的。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-03-27 16:32

@jsonliu: 走while的时候就是重新new的DbContext啊

支持(0) 反对(0) jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:34

@jsonliu: 

1、在db.savechanges的时候,修改,然后再执行这行代码报错

这样一定报错的。

2、你这代码问题太多,我也不知道该如何说你才明白了。

3、经典建议,多看书总是没错的。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-03-27 16:42

@爱编程的大叔: 谢了是我大意了。

支持(0) 反对(0) jsonliu | 园豆:86 (初学一级) | 2015-03-27 16:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册