我尝试使用Winforms和Code First EF实现CRUD。对于浏览器的每个实例,都有一个控制器,每个控制器都有一个存储库,而存储库是一个继承自DbContext的类。 My Repository类有一个方法名称GetNextPage(),它返回一个已过滤的实体列表。
我一直在努力了解缓存是如何工作的,以及它的含义是什么。我花了一段时间才意识到通过第二次调用GetNextPage(),虽然正在对数据库运行查询,但结果集仍然是相同的。意思是,DbSet<>()返回的集合中反映的数据库中的记录没有更新。所以,当我意识到DbContext正在缓存内容,但仍然在数据库上运行查询时,听起来相当愚蠢。
如果我尝试使用DbGet<>()。Single(),它会对数据库运行查询,但不会实际更新实体。我之前被迫分离了实体,因此我可以从上下文中实际获取更新的对象。
最后但并非最不重要的是,在尝试删除实体后,如果它失败,因为它包含未被级联删除的依赖实体,如果我尝试DbGet<>()。单个在同一实体上,而不是之前分离它,依赖实体列表来备份EMPTY! WTH ???这绝对没有任何意义。
在这一点上真的要理解EF,特别是因为互联网上有很多相互矛盾的信息,主要是因为版本不同。
嗯,我想我的问题是,缓存的重点是什么?