2

如果我打算使用数据缓存,在使用延迟加载时是否需要担心冲突?似乎使用 linq 我正在失去对数据的控制。

4

1 回答 1

2

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

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

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

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

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


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

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

是的,这会奏效。但是,它们并不是完全独立的。

  • 这是关闭缓存的方法(默认情况下它是打开的)。
  • 以下是如何打开延迟加载(默认开启)。 阅读这篇文章,因为它解释了这些特性是如何相互作用的。

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

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

  • 有一种方法可以使用数据库中的更改来更新缓存,也就是Refresh
  • 无法将更改从数据库推送到缓存。
于 2009-01-28T17:20:16.213 回答