2009-03-03 2 views
0

Я действительно не знал, как сформулировать заголовок. Но это моя проблема. Мы используем SqlCacheDependencies для обновления объектов кеша. Но запрос, стоящий за этим, «сложный», мы хотели бы сделать его несколько проще.Имя столбца SQL для указания изменения

Наша первая мысль состояла в том, чтобы добавить имя поля, например DateChanged, и использовать DateChanged, чтобы проверить, действительно ли объект изменился вместо загрузки всех столбцов таблицы.

SELECT DateChanged FROM Table1 

в смену

SELECT Id, Title, DateChanged, Description FROM Table1 

Но я надеялся, кто-то может сказать мне, если есть и другие способы сделать это, или если существуют стандарты для имен столбцов, что указывает на изменение. Каким образом фреймворки, такие как «Entity framework» или «NHibernate», обрабатывают это?

ответ

1

Эти столбцы, которые я использую на "проверяемых" сущностей:

version: hibernate's optimistic concurrency control 
createdBy: FK to users 
modifiedBy: FK to users 
createdAt: timestamp 
modifiedAt: timestamp
0

Если вы на SQL Server знаете, что столбец временной метки несколько вводит в заблуждение. Хотя он может использоваться для отслеживания изменений в столбце, его значение не имеет ничего общего с датой или временем. Его можно рассматривать как идентификатор uniqiue в базе данных, не более того. http://msdn.microsoft.com/en-us/library/aa260631.aspx

Для того, чтобы узнать, произошли ли изменения, вам нужны два временных штыря, как в ответе cherouvim. Один устанавливается, когда объект создается, а другой - при любой модификации, возможно, с помощью триггера обновления. Если они отличаются, объект редактируется, но вы точно не можете сказать.

На SQL Server вы должны использовать тот же шаблон, но с столбцами datetime. Затем вы можете рассчитать дату строки, вычитая дату создания из даты модификации.

+0

Я не думаю, что вам нужны две метки времени. Данные кэширования будут иметь значение временной метки, и его можно сравнить с текущим значением временной метки в базе данных. Если они совпадают, то никакие дальнейшие обновления не были сделаны для базы данных, поскольку строка была кэширована. – MikeW

+0

Вы совершенно правы. Я не рассматривал кеш – banjollity

Смежные вопросы