从数据中取值的问题

cpp_1 2021-01-24 03:07:46
我用c# winform 用的是ADO.net

我有这样一张表pc_info,表中有一个字段stauts

pcsystemEntities db = new pcsystemEntities();

private void read()
{
var pcinfo = db.pc_info.Where(x => x.pc_code == "123").ToList();

if (pcinfo.stauts ==1){
。。。。。
}

}

正常是可以从数据中读取到相对应的值 。



现在的问题是:

1。这个界面不关
2。我手工从数据库中,把status =1 ->改成status=2
3。在界面中,重新执行,查询按钮read(),界面上的到的值status还是1

我只有把这个界面关闭,重新打开后,才会加载到新值status=2,难到是我查询写的不对,还是什么
我看linq 送到数据库里面的select语句是能查到最新的值。
但在返回的时候,还是用的旧值。


我要想的结果是:
1。数据库中只要有修改,界面在不重新打开的情况下,我执行重新查询可以取到当前最新的值。
...全文
206 点赞 收藏 9
写回复
9 条回复
shawn_yang 01月28日
pcsystemEntities db = new pcsystemEntities();放read函数里
回复 点赞
cpp_1 01月25日
你是想说,没有取到具体哪一行的stauts 是吧 这个不是最主要的问题 主要问题是,全局DB和手工修改数据库中值,缓存的问题
回复 点赞
Bridge_go 01月25日
var pcinfo = db.pc_info.Where(x => x.pc_code == "123").ToList(); if (pcinfo.stauts ==1) 你这代码不会报错???
回复 点赞
ziqi0716 01月25日
缓存通常这样做是为了提高性能,即使你找到如何配置不使用缓存,那也没有啥好处,想想是不是自己的操作是否应该放到设计约束中.
回复 点赞
ziqi0716 01月25日
如果没有猜错,是默认缓存了的原因.数据库连接对象为了减少IO,通常会使用缓存来将查询及结果存起来,下次查询直接给结果,不去数据库里面重复读取(因为程序本身没有修改数据库,是你在外部修改的数据库).具体如何配置我也不知道,自己查查.
回复 点赞
郑剑1996 01月25日




private void  read()
{
using(pcsystemEntities db = new pcsystemEntities())
{

var pcinfo = db.pc_info.Where(x => x.pc_code == "123").ToList();

if (pcinfo.stauts ==1){
。。。。。
}
}

}




这样写,每次使用同一个数据库上下文,会读取缓存.
回复 点赞
手工修改了数据库的值,如果界面不操作,你能做到让他通知客户端程序吗?有点复杂吧? 通常我们都是每点一次查询就查一下数据库,至于缓存,是你知道你的数据变化频率不大,最好用,如果一个结果集变化频率大, 没必要存缓存吧
回复 点赞
cpp_1 01月24日
AsNoTracking(),无效果 我试了一下,每做一次查询就NEW DB,就可以实时拿到,手工对数据库内修改后的值, DB,放到全局变量里面去,就一直拿的是旧的数值。 但每一次查询NEW一个,这个好像太浪费资源了吧。 还有没有什么办法。 pcsystemEntities db ; private void read() { db= new pcsystemEntities(); var pcinfo = db.pc_info.Where(x => x.pc_code == "123").ToList(); if (pcinfo.stauts ==1){ 。。。。。 } }
回复 点赞
楠小南 01月24日
那就不跟踪呗,用AsNoTracking() 这样数据就是只读的,,这样每次查询都是从数据库拿的,缺点是上下文中没有数据的记录,无法update

var pcinfo = db.pc_info.Where(x => x.pc_code == "123").AsNoTracking().ToList();
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告