.net 数据库更改时重新加载缓存

.net 数据库更改时重新加载缓存,.net,sql,caching,sqldependency,invalidation,.net,Sql,Caching,Sqldependency,Invalidation,我正在开发一个.net客户端应用程序,它使用实体框架访问数据库。它是一个多用户应用程序,其中(有时)几个小时(可能是几天)没有更改,有时一次有数百个更改 我需要缓存大量数据,因为需要进行一些检查并向用户显示。我解决了当一个应用程序实例中发生变化时一个缓存更新其他缓存的问题。但是,我不确定在应用程序的其他实例中发生更改时,最好的方法是什么 我试图使用SqlDependency使缓存无效,但这会迫使我在只有一位发生更改时重新加载大量数据。性能不是很好。此外,当使用SqlDependecy的应用程序更

我正在开发一个.net客户端应用程序,它使用实体框架访问数据库。它是一个多用户应用程序,其中(有时)几个小时(可能是几天)没有更改,有时一次有数百个更改

我需要缓存大量数据,因为需要进行一些检查并向用户显示。我解决了当一个应用程序实例中发生变化时一个缓存更新其他缓存的问题。但是,我不确定在应用程序的其他实例中发生更改时,最好的方法是什么

我试图使用
SqlDependency
使缓存无效,但这会迫使我在只有一位发生更改时重新加载大量数据。性能不是很好。此外,当使用
SqlDependecy
的应用程序更改数据中的某些内容时,它也会触发,因此一次更改会使缓存更新两次


因为我从来没有开发过这么多缓存的东西,所以我不知道如何最好地继续。执行此操作的最佳方法是什么?

单个位仍然不能强制您重新加载所有数据。
您可以读取数据并仅更新已更改的数据

或者,您可以在SQL上实现一个触发器,用于写出更改,因此您只需检查该表。
如果多个客户端正在从触发器表同步,则可能会有另一个FK表,客户端可以指示它们拾取的内容。

像晚上一样把东西清理干净

为什么一个比特的改变会迫使你重新加载很多数据?也许我做错了什么,但是当我收到通知时,我不知道到底是什么改变了,所以我不能只重新加载改变的数据。我需要重新标记在SqlCommand下可能发生的所有更改。例如,表“A”中的所有元素,其中fk…=x。可以是相当多的数据。请理解,但一个位仍然不能强制您重新加载所有数据。您可以读取数据并仅更新已更改的数据。或者,您可以在SQL上实现一个触发器,该触发器写出更改,因此您只需检查该表即可。谢谢,我将对此进行研究。对我来说,这听起来是一个很好的解决办法。你的回答确实让我走了。我只是不确定是应该使用触发器还是由
SQL Server
(2008 R2及更新版本)提供的
更改跟踪
。通过使用触发器的解决方案,我有了更多的控制权,但必须对每个表进行控制。或者是否有可能在一个触发器中对所有表执行此操作?(我以前从未使用过触发器)我建议两者都使用。将跟踪更改为通知。然后触发以确定更改了哪些数据。我不认为所有的表都有一个触发器,并且怀疑这是最好的解决方案。当然,您有一些表没有被用户更新。您不希望触发器表被触发。可以有多个触发器写入同一个表。