.net mvc3中数据不一致问题

麦田守望者92 2014-04-16 12:57:29
用.net mvc3和entity framework(code-first)的框架做的一个酒店预订系统,用了Areas来分离项目,包括用户,酒店管理员,系统管理员三个。问题在我在用户界面下了订单后,查看数据库发现房间状态以改变。但是用酒店管理员登陆后通过房间状态查询时,查询的出的状态仍然是下单之前的状态。必须重新启动调试后才能在页面正常显示修改后的数据。打断点发现数据是没有变的。但是数据库的数据是变了的。是不是有缓存的原因(我没有专门的去配置缓存设置)?该怎么解决啊?
...全文
218 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 1 楼 WGJ1333 的回复:
我也坐等答案~~~~~~~~~~~~~~~~~~~~~~
查询时调用下AsNoTracking()方法就可以不查缓存而直接查询数据库显示正确数据了。你试试吧,不知道你是怎么查询的。我用的linq to sql
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 10 楼 moonwrite 的回复:
是不是EF创建为静态的或者是有了一些特定的函数~ 有些函数是先查EF的缓存,如果没有找查数据库的~ 贴出你的查询来瞧瞧
roomDetaiId = (from t in hotelDB.RoomDetails where t.roomId == roomid && t.roomState == search_roomState orderby t.roomDetailId select t).ToList()
淡淡的活着 2014-04-16
  • 打赏
  • 举报
回复
引用 9 楼 rxb199256 的回复:
[quote=引用 6 楼 qq931121347 的回复:] [quote=引用 5 楼 rxb199256 的回复:] [quote=引用 2 楼 qq931121347 的回复:] 应该不是缓存问题 我用都没有过 你确定你管理员的数据是重新查询出来的而不是原来的么?如果是 那查询完了重新绑定没有啊··
在不断开连接的情况下查询出来的是旧数据,只有重新连接后才能查出新数据。[/quote]什么断开连接 不断开连接··数据库连接?我觉得可能是你没有重新绑定吧··[/quote] 解决了,貌似是Dbset<>在获取数据库的实体集合时默认的会有缓存。用Areas分离后,貌似不同的Areas下修改后,其他的Areas下的会先查询缓存数据吧。后来我在查询中加了AsNoTracking()方法如下后,就不会查询缓存了,直接就查数据库就可以显示新数据了。(这是我的理解,也不知道对不对,我是新手,还望指正。) roomDetaiId = (from t in hotelDB.RoomDetails.AsNoTracking() where t.roomId == roomid && t.roomState == search_roomState orderby t.roomDetailId select t).ToList() 你说的重新绑定是怎么绑定啊?[/quote]噢··用的框架不一样··没注意到·我还以为你是查询问题·
moonwrite 2014-04-16
  • 打赏
  • 举报
回复
是不是EF创建为静态的或者是有了一些特定的函数~ 有些函数是先查EF的缓存,如果没有找查数据库的~ 贴出你的查询来瞧瞧
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 6 楼 qq931121347 的回复:
[quote=引用 5 楼 rxb199256 的回复:] [quote=引用 2 楼 qq931121347 的回复:] 应该不是缓存问题 我用都没有过 你确定你管理员的数据是重新查询出来的而不是原来的么?如果是 那查询完了重新绑定没有啊··
在不断开连接的情况下查询出来的是旧数据,只有重新连接后才能查出新数据。[/quote]什么断开连接 不断开连接··数据库连接?我觉得可能是你没有重新绑定吧··[/quote] 解决了,貌似是Dbset<>在获取数据库的实体集合时默认的会有缓存。用Areas分离后,貌似不同的Areas下修改后,其他的Areas下的会先查询缓存数据吧。后来我在查询中加了AsNoTracking()方法如下后,就不会查询缓存了,直接就查数据库就可以显示新数据了。(这是我的理解,也不知道对不对,我是新手,还望指正。) roomDetaiId = (from t in hotelDB.RoomDetails.AsNoTracking() where t.roomId == roomid && t.roomState == search_roomState orderby t.roomDetailId select t).ToList() 你说的重新绑定是怎么绑定啊?
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 3 楼 webdiyer 的回复:
应该是你自己的问题,比如设置了缓存什么的,EF我用了好几年了,从没见过你说的问题
杨老师,自己解决了,貌似是Dbset<>在获取数据库的实体集合时默认的会有缓存。用Areas分离后,貌似不同的Areas下修改后,其他的Areas下的会先查询缓存数据吧。后来我在查询中加了AsNoTracking()方法如下后,就不会查询缓存了,直接就查数据库就可以显示新数据了。(这是我的理解,也不知道对不对,我是新手,还望老师指正。) roomDetaiId = (from t in hotelDB.RoomDetails.AsNoTracking() where t.roomId == roomid && t.roomState == search_roomState orderby t.roomDetailId select t).ToList()
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 6 楼 qq931121347 的回复:
[quote=引用 5 楼 rxb199256 的回复:] [quote=引用 2 楼 qq931121347 的回复:] 应该不是缓存问题 我用都没有过 你确定你管理员的数据是重新查询出来的而不是原来的么?如果是 那查询完了重新绑定没有啊··
在不断开连接的情况下查询出来的是旧数据,只有重新连接后才能查出新数据。[/quote]什么断开连接 不断开连接··数据库连接?我觉得可能是你没有重新绑定吧··[/quote] 比如说我在用vs调试的时候,必须先断开调试后,重新启动调试,这样才能在页面显示出新数据。你说的重新绑定是怎么回事啊?怎么绑定啊?
淡淡的活着 2014-04-16
  • 打赏
  • 举报
回复
引用 5 楼 rxb199256 的回复:
[quote=引用 2 楼 qq931121347 的回复:] 应该不是缓存问题 我用都没有过 你确定你管理员的数据是重新查询出来的而不是原来的么?如果是 那查询完了重新绑定没有啊··
在不断开连接的情况下查询出来的是旧数据,只有重新连接后才能查出新数据。[/quote]什么断开连接 不断开连接··数据库连接?我觉得可能是你没有重新绑定吧··
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 2 楼 qq931121347 的回复:
应该不是缓存问题 我用都没有过 你确定你管理员的数据是重新查询出来的而不是原来的么?如果是 那查询完了重新绑定没有啊··
在不断开连接的情况下查询出来的是旧数据,只有重新连接后才能查出新数据。
麦田守望者92 2014-04-16
  • 打赏
  • 举报
回复
引用 3 楼 webdiyer 的回复:
应该是你自己的问题,比如设置了缓存什么的,EF我用了好几年了,从没见过你说的问题
杨老师,我都是默认的设置,自己并没有设置缓存啊,该怎么查找问题呢?
webdiyer 2014-04-16
  • 打赏
  • 举报
回复
应该是你自己的问题,比如设置了缓存什么的,EF我用了好几年了,从没见过你说的问题
淡淡的活着 2014-04-16
  • 打赏
  • 举报
回复
应该不是缓存问题 我用都没有过 你确定你管理员的数据是重新查询出来的而不是原来的么?如果是 那查询完了重新绑定没有啊··
WGJ1333 2014-04-16
  • 打赏
  • 举报
回复
我也坐等答案~~~~~~~~~~~~~~~~~~~~~~

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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