从数据中取值的问题

[复制链接]
查看11 | 回复8 | 2021-1-27 05:01:53 | 显示全部楼层 |阅读模式
我用c#winform用的是ADO.net
我有这样一张表pc_info,表中有一个字段stauts
pcsystemEntitiesdb=newpcsystemEntities();
privatevoidread()
{
varpcinfo=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。数据库中只要有修改,界面在不重新打开的情况下,我执行重新查询可以取到当前最新的值。

分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
那就不跟踪呗,用AsNoTracking()这样数据就是只读的,,这样每次查询都是从数据库拿的,缺点是上下文中没有数据的记录,无法update

varpcinfo=db.pc_info.Where(x=>x.pc_code=="123").AsNoTracking().ToList();

回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
AsNoTracking(),无效果
我试了一下,每做一次查询就NEWDB,就可以实时拿到,手工对数据库内修改后的值,
DB,放到全局变量里面去,就一直拿的是旧的数值。
但每一次查询NEW一个,这个好像太浪费资源了吧。
还有没有什么办法。

pcsystemEntitiesdb;
privatevoidread()
{
db=newpcsystemEntities();
varpcinfo=db.pc_info.Where(x=>x.pc_code=="123").ToList();
if(pcinfo.stauts==1){
。。。。。
}
}
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
如果没有猜错,是默认缓存了的原因.数据库连接对象为了减少IO,通常会使用缓存来将查询及结果存起来,下次查询直接给结果,不去数据库里面重复读取(因为程序本身没有修改数据库,是你在外部修改的数据库).具体如何配置我也不知道,自己查查.
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
缓存通常这样做是为了提高性能,即使你找到如何配置不使用缓存,那也没有啥好处,想想是不是自己的操作是否应该放到设计约束中.
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
varpcinfo=db.pc_info.Where(x=>x.pc_code=="123").ToList();
if(pcinfo.stauts==1)

你这代码不会报错???
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
你是想说,没有取到具体哪一行的stauts是吧
这个不是最主要的问题
主要问题是,全局DB和手工修改数据库中值,缓存的问题
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层
手工修改了数据库的值,如果界面不操作,你能做到让他通知客户端程序吗?有点复杂吧?
通常我们都是每点一次查询就查一下数据库,至于缓存,是你知道你的数据变化频率不大,最好用,如果一个结果集变化频率大,没必要存缓存吧
回复

使用道具 举报

千问 | 2021-1-27 05:01:53 | 显示全部楼层


privatevoidread()
{
using(pcsystemEntitiesdb=newpcsystemEntities())
{
varpcinfo=db.pc_info.Where(x=>x.pc_code=="123").ToList();
if(pcinfo.stauts==1){
。。。。。
}
}
}



这样写,每次使用同一个数据库上下文,会读取缓存.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行