Лично я уже использовал подход с метками времени, и он работает хорошо - он делает кэширование более эффективным, получая только те данные, которые изменились с момента последнего чтения.
В качестве альтернативы, я бы хотелпредложите класс SqlCacheDependency , который позаботится о том, чтобы кеш обновлялся для вас.Я не могу комментировать какие-либо реальные плюсы и минусы этого, или сравнения производительности и подхода с отметкой времени, поскольку я сам не использовал его.
Есть еще одна полезная статья о SqlCacheDependency здесь
Обновление: Да, я не думаю, что это действительно обновит данные.Похоже, вы должны сделать это самостоятельно.От 2-ой ссылки:
Когда данные изменяются - и только тогда - элементы кэша, основанные на этих данных, становятся недействительными и удаляются из кэша.В следующий раз, когда вы запросите этот элемент из кэша, если его нет в кэше, вы можете повторно добавить обновленную версию в кеш и быть уверенным, что у вас есть самые последние данные
Там также естьОсобые примечания по реализации SQL 2005 во 2-й ссылке:
SQL Server 2005 отслеживает изменения в наборе результатов конкретной команды SQL.Если в базе данных произойдет изменение, которое изменит набор результатов этой команды, зависимость приведет к тому, что кэшированный элемент станет недействительным.Это позволяет SQL Server 2005 предоставлять уведомления на уровне строк.
Я лично думаю, что я бы использовал подход с метками времени (это то, что я делал раньше), поскольку я не вижу на лицеиз этого, что SqlCacheDependency даст какие-либо преимущества в производительности - я думаю, что он будет менее производительным (просто проще в реализации).Однажды я перейду к тому, чтобы на самом деле попробовать SqlCacheDependency для правильного анализа производительности:)
Обновление 2: Что касается объединения новых данных в существующую таблицу данных, я думаю, Объединение Метод DataTable - это то, что вам нужно.
Метод Merge используется для объединения двух объектов DataTable, имеющих в значительной степени сходные схемы.Слияние обычно используется в клиентском приложении для включения последних изменений из источника данных в существующую таблицу данных.......При объединении нового исходного объекта DataTable с целевым объектом любые исходные строки со значением DataRowState, равным «Не изменен», «Изменен» или «Удален», сопоставляются целевым строкам с одинаковыми значениями первичного ключа.Исходные строки с добавленным значением DataRowState добавляются к новым целевым строкам с теми же значениями первичного ключа, что и для новых исходных строк.
Вам просто нужно убедиться, что вы определили столбец (и) в таблице данныхэто первичный ключ.