使用数据缓存和延迟加载时是否存在冲突?

时间:2009-01-28 13:48:31

标签: linq caching lazy-loading

如果我计划使用数据缓存,我还要在使用延迟加载时担心冲突吗?似乎用linq我失去了对数据的控制。

1 个答案:

答案 0 :(得分:2)

LinqToSql和EntityFramework都提供了这两种功能(延迟加载和数据缓存)。

例如,如果您最初加载客户,则该客户将被缓存,如果您再次要求它,您将获得相同的实例。

如果在初始加载期间未加载客户订单,则该Customer实例的Orders属性将处于卸载状态。当您加载这些订单时,订单实例将通过该属性提供。

  • LinqToSql将在第一次使用时加载该属性。
  • EntityFramework会在要求时加载该属性(使用Load方法)。

在这两种技术中,Context都是执行缓存的东西......因此,如果您使用多个Context实例 - 您可以观察到真正代表同一客户的不同Customer实例。


在评论中解决您的问题。我将谈论LinqToSql,但这些东西也应该在EntityFramework中工作。

  

如果我关闭延迟加载,我认为数据缓存仍然有效吗?

是的,那会有效。但是,它们并非完全独立。

  

是数据缓存刷新,取决于数据表和/或时间是否有变化?

没有刷新或重置缓存。如果你想要一个新的缓存,要做的是创建一个新的DataContext。每个DataContext实例都有自己的缓存。

  • 有一种方法可以通过数据库中的更改来更新缓存,即Refresh
  • 无法将更改从数据库推送到缓存。