В моей таблице есть столбец отметки времени с именем «RowVer», который LINQ сопоставляет с типом System.Data.Linq.Binary. Этот тип данных кажется мне бесполезным, потому что (если я что-то упускаю) я не могу делать такие вещи:
// Select all records that changed since the last time we inserted/updated.
IEnumerable<UserSession> rows = db.UserSessions.Where
( usr => usr.RowVer > ???? );
Итак, одно из решений, которые я рассматриваю, - это добавить новый «вычисляемый столбец» под названием RowTrack, который определен в SQL следующим образом:
CREATE TABLE UserSession
(
RowVer timestamp NOT NULL,
RowTrack AS (convert(bigint,[RowVer])),
-- ... other columns ...
)
Это позволяет мне запрашивать базу данных так, как я хочу:
// Select all records that changed since the last time we inserted/updated.
IEnumerable<UserSession> rows = db.UserSessions.Where
( usr => usr.RowTrack > 123456 );
Это плохой способ делать вещи? Насколько эффективен запрос к вычисляемому столбцу? Есть ли лучший обходной путь?
Кроме того, я разрабатываю Sql Server 2000 для максимальной обратной совместимости, но я могу убедить босса сделать 2005 наименьшим общим знаменателем.