具有SQL Service Broker的实体框架

时间:2012-05-17 15:55:37

标签: entity-framework service-broker

我想知道如何在EF4.x或EF5中使用SQL Service Broker?

方案: 说,我有一个产品列表,我不希望每次客户访问该页面时都从db加载。当然我可以缓存页面,但是如果产品经理添加了新产品,它将不会立即显示,直到缓存已过期或查询参数已更改。

解决方案: 在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补丁后它突然失效,我也不会感到惊讶。是否有更“正式”的方式来做到这一点?谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

请参阅LinqToCache,它允许通过任意LINQ查询的SqlDependency进行缓存。说到EF,它归结为EF创建的SQL查询是否符合查询通知的限制。上次我检查EF是无偿地在请求中添加子查询,从而使查询无法通知。我听说最新的EF更好,它可能有用,但我自己没有测试过。

答案 2 :(得分:1)

  

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

我刚刚修复了断开的链接。这并不神秘,只是指向MSDN article "Creating a Query for Notification"的链接。