Вопрос

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

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

SELECT DateChanged FROM Table1

вместо

SELECT Id, Title, DateChanged, Description FROM Table1

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

Это было полезно?

Решение

Обычно это называется «метка времени».

то есть в

Другие советы

Вот столбцы, которые я использую для «проверяемых» объектов:

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top