taijiman 2023-07-12 16:54 采纳率: 0%
浏览 76
已结题

winform使EFCore不能刷新到新数据

请教一下:我用EF Core + Sqlite开发一个winform窗体程序。现在有一个现象,比如说我有个窗体用于显示日志列表,然后有另外一个窗体,在它上面进行一个增加日志的操作,接着刷新(就是重新查询载入)日志显示窗体,却看不到任何变化,但如果关闭后重新打开这个窗体,就能看到新增加的记录,请问为什么会这样?
我怀疑可能是dbcontext的问题,于是控制了一下这两个窗体所使用的dbcontext对象,发现无论使用同一个对象(通过上下文ID判断)还是两个不同的对象,问题依旧!
望大家不吝赐教,这到底是为什么呢?

  • 写回答

2条回答 默认 最新

  • PhoenixRiser 2023-07-12 17:08
    关注

    TechWhizKid参考GPT回答:

    • 在使用EF Core时,有一种情况可能导致你描述的问题:EF Core的缓存策略。当你查询数据库时,EF Core会在内部缓存你查询到的对象。如果你再次执行相同的查询,EF Core可能只是从内部缓存中返回对象,而不是从数据库中获取新的数据。这就是为什么你可能没有看到新添加的日志记录。

    • 对于这个问题,一种解决方案是强制EF Core为每次查询从数据库中获取新的数据,而不是使用缓存。你可以使用AsNoTracking()方法来达到这个目的。这个方法会告诉EF Core不要跟踪返回的实体,也就是说,它们不会被添加到内部缓存中。

    在你的日志显示窗体中,当你查询日志记录时,你可以这样做:

    var logs = dbContext.Logs.AsNoTracking().ToList();
    

    这样应该能解决你的问题。

    另外,你也应该检查你的日志添加操作是否已经正确提交。当你向数据库中添加新的记录时,需要确保你已经调用了SaveChanges()或者SaveChangesAsync()方法。如果你没有调用这些方法,新的记录不会被保存到数据库中。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月12日
  • 创建了问题 7月12日

悬赏问题

  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题
  • ¥15 MS中不知道高分子的构型怎么构建模型
  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
  • ¥15 matlab代码 关于微分方程和嵌套的分段函数。