2

我想知道如何/是否可以在 EF4.x 或 EF5 中使用 SQL Service Broker?

场景:假设我有一个产品列表,我不想每次客户访问页面时都从数据库加载它。当然我可以缓存页面,但是如果产品经理添加了新产品,它不会立即显示出来,直到缓存过期或查询参数发生变化。

解决方案:在 SQL 中,我们可以 Enable_Broker 并在 web 应用程序中启动链接 SqlDependency。SQL 将向我们的 Web 应用程序发送通知。因此,我们有一个智能的“缓存”系统。如果我们可以使用那个智能缓存,这一切都说得通。当有 1,000 个客户点击该页面时,我们不需要访问 SQL db 1,000 次。但是一旦数据库发生变化,当时访问该页面的第一个客户就会看到反射。我们两全其美。

问题:实体框架未公开此功能。还是我不知道?由于 SQL 2005 和 ASP.NET 2.0 已经具备了这种能力。EF 4/5 不能错过这个重要功能,对吧?我需要一些专家来帮助我解决这个问题。

我碰巧从这个链接中找到了一个黑客:

http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server

然而,它或多或少是一种“无证魔法”的方式,它有一些未知的限制(该页面的限制链接已被删除,所以我不知道它们是什么)。所以,它对我来说使用起来不够可靠,如果它在一个新的 EF 补丁后突然不起作用,我也不会感到惊讶。有没有更“官方”的方式来做到这一点?谢谢!

4

3 回答 3

1

.Net 提供了在您需要时使缓存失效的方法,您可以设置您的更新页面,产品经理在更新时使用该页面使缓存失效。可能比设置服务代理更容易

于 2012-05-17T16:18:12.733 回答
1

请参阅LinqToCache,它通过任意 LINQ 查询的 SqlDependency 启用缓存。对于 EF,它归结为 EF 创建的 SQL 查询是否符合查询通知的限制。上次我检查 EF 时无偿在请求中添加了一个子查询,从而使查询无法通知。我听说最新的 EF 更好,它可能会起作用,但我自己还没有测试过。

于 2012-05-18T07:02:30.307 回答
1

它有一些未知的限制(该页面的限制链接已被删除,所以我不知道它们是什么)

我刚刚修复了那个断开的链接。这并不神秘,只是指向MSDN 文章“Creating a Query for Notification”的链接。

于 2012-08-03T06:48:09.103 回答