如果我打算使用数据缓存,在使用延迟加载时是否需要担心冲突?似乎使用 linq 我正在失去对数据的控制。
zsharp
问问题
1078 次
1 回答
2
LinqToSql 和 EntityFramework 都提供了这两种功能(延迟加载和数据缓存)。
例如,如果您最初加载一个客户,该客户将被缓存,如果您再次请求它,您将获得相同的实例。
如果您在初始加载期间未加载客户的订单,则该客户实例的 Orders 属性将处于未加载状态。当您加载这些订单时,订单实例将通过该属性可用。
- LinqToSql 将在第一次使用时加载该属性。
- EntityFramework 将在被要求时加载该属性(使用 Load 方法)。
在这两种技术中,上下文都是进行缓存的东西......因此,如果您使用多个上下文实例 - 您可以观察到真正代表同一客户的不同客户实例。
在评论中解决您的问题。我将谈论 LinqToSql,但这些东西也应该在 EntityFramework 中工作。
- 这是延迟加载与立即加载的解释。
- 这是对象标识和缓存的解释。
如果我关闭延迟加载,我接受它,数据缓存仍然有效吗?
是的,这会奏效。但是,它们并不是完全独立的。
数据缓存刷新是否取决于数据表和/或时间是否发生变化?
没有刷新或重置缓存。如果你想要一个新的缓存,要做的就是创建一个新的 DataContext。DataContext 的每个实例都有自己的缓存。
- 有一种方法可以使用数据库中的更改来更新缓存,也就是Refresh。
- 无法将更改从数据库推送到缓存。
于 2009-01-28T17:20:16.213 回答