LINQ TO SQL,同一个连接怎么能够查询数据库的最新数据

zpj888 2010-09-07 08:50:53
我把dc连好后,就一直使用其对数据库进行增、删、改操作,项目最后才发现一个问题:
我直接在数据库中修改一个数据,dc查询不到最新值,
但是在数据库中增加、删除,则可以查询到。

不把dc重新连接,有没有办法查询到最新数据?


假设有一个表:TblSample
只有2个字段:ID、Name
只有1条记录:ID是1,Name是“test”

程序中生成dbml文件、创建dc、连接数据库过程省略
查询代码(代码中各种判错语句省略):
var query = from p in dc.TblSample select p;
Console.WriteLine(query.first().Name);

假设程序只有这么简单,启动后就是创建dc、连接数据库,点下某个按钮则执行查询、打印。

我使用Sql Server提供的企业管理器或者查询分析器修改记录的Name字段为"test2",然后重新查询,打印的结果依然是旧的"test"。但是如果程序重启,也或者重新创建dc、连接数据库,则能正确查询到"test2"



用C#做的Winfrom开发

该问题本来发在LINQ模块,但是那边太冷清,在这边帮忙解决问题的朋友,到时顺便那边也回复下,分全给(那边100分)
http://topic.csdn.net/u/20100906/13/8e43fe02-7696-4682-a415-d38260509a91.html?82775
...全文
242 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zpj888 2010-09-09
  • 打赏
  • 举报
回复
通过几天的资料查找、代码测试,对LINQ更新这块的了解加深不少,最终确认的就是微软确实是没有开放实时查询,网上有一个“Huagati DBML/EDMX Tools ”,是微软的DBML的扩展,可以做到实时查询,但是我电脑一直没有安装成功。

如果关闭缓存,则更新、修改都将成为问题。
使用全局DC的一个方案就是在查询之后,再用Refresh对数据进行更新,但是如果数据量大,效率将会低的可怕。

最终还是采用每次重新创建dc的方式
zpj888 2010-09-08
  • 打赏
  • 举报
回复
我设置了不缓存,发现设置不缓存之后,又不知道怎么修改记录了,LINQ还挺麻烦啊
claymore1114 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wuyq11 的回复:]
using (DemoDataContext db = new DemoDataContext())
{
T t= new T{ Title = "测试" };
db.T.InsertOnSubmit(t);
db.SubmitChanges();
int ID = t.ID;
}
[/Quote]
DataContext好像是自动释放的,不用using\ dispose ,直接声明即可。
linq 是延迟查询,如果显示释放,可能返回null,建议返回时,不要延迟。
wuyq11 2010-09-07
  • 打赏
  • 举报
回复
using (DemoDataContext db = new DemoDataContext())
{
T t= new T{ Title = "测试" };
db.T.InsertOnSubmit(t);
db.SubmitChanges();
int ID = t.ID;
}
claymore1114 2010-09-07
  • 打赏
  • 举报
回复
创建的时候当然 会重新连接,linq to sql 只是封装了ADo.net。即时释放即可。
反正 全局的datacontext 是不可取的。
zpj888 2010-09-07
  • 打赏
  • 举报
回复
还有如果LINQ只是从上下文中读取,那为什么数据库中增、删数据,能读出来
zpj888 2010-09-07
  • 打赏
  • 举报
回复
1L,这样会不会相当于每次重新连接数据库?
chengwen2402163 2010-09-07
  • 打赏
  • 举报
回复
linq的数据上下文(datacontext)是从缓存中读的,
每一次对数据库的操作,重新创建一下就好了。。。
一楼可行。
josxhn 2010-09-07
  • 打赏
  • 举报
回复
没做过,纯友情帮顶
claymore1114 2010-09-07
  • 打赏
  • 举报
回复
一般 不会出现你的情况,你的dc有问题,要想获取最新的,不要把 dc 缓存起来,不要设置成全局变量。
即时用即时创建。
比如在TblSample.cs中,在构造函数中要重新创建,再使用dc.

DataContext1 dc= null;
public TblSample()
{
dc= new DataContext1();
}
zpj888 2010-09-07
  • 打赏
  • 举报
回复
Teng_s2000,不缓存怎么设置?

我的意思就是只在全局申请一个datacontext,连接一次数据库,同时不使用字符串的SQL语句

其他客户端对数据库的增加、删除操作,这边都能正常查询到,就是其他客户端的修改操作,这边查询不到
Teng_s2000 2010-09-07
  • 打赏
  • 举报
回复
1.不缓存
2.注意清理资源,和Wuyq11那样用using
zpj888 2010-09-07
  • 打赏
  • 举报
回复
我觉得DataContext不应该每次重新创建,它本身已经是智能型连接了
数据库的增加、删除都能查询到,就是修改查询不到

不知道wuyq11 有没有方案能够不更新dc,用LINQ还能查询到数据库更新内容

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧