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。
是重用同一个DbContext实例惹的祸。
创建DbContext开销不大,建议在 var bbb = db.PoDays.Where(o => o.PoDate == date).FirstOrDefault(); 之前创建一个新的DbContext实例给db。
我大意了,先前也new了行的DbContext的,不过下面查询的时候没有改成新的,导致我一直以为new了新的DbContext也不管用。
谢了
如果数据即时性对你很重要的话,你每次使用一个新的db就行了。保证不会有缓存问题。
using db
{
}
试过了没用
@jsonliu:
你没明白我说的,你怎么试的?
@爱编程的大叔:
@jsonliu: 你在哪行代码的时候直接修改的数据库?
@爱编程的大叔: poday.podayid=10,我手动数据库修改podayid=100,db.savechanges()报错,在走while,执行sql查查来的值也是100,但是断点调试,poday.podayid=11,并发标示也未更新,都是第一次走while时候的数据,依次加1
@爱编程的大叔: 在db.savechanges的时候,修改,然后再执行这行代码报错,走while,然后执行的sql查询的值都是100,并发标示也是最新的,但是程序断点,值是第一次查询的加1,并发标示也没有变
@jsonliu: 所以说你没明白我说的。
你不能在一个db内部修改数据库值啊。
只要你手工修改数据库后,再NEW 一个DB,怎么都不会有问题的。
@jsonliu: 走while的时候就是重新new的DbContext啊
@jsonliu:
1、在db.savechanges的时候,修改,然后再执行这行代码报错
这样一定报错的。
2、你这代码问题太多,我也不知道该如何说你才明白了。
3、经典建议,多看书总是没错的。
@爱编程的大叔: 谢了是我大意了。