Какое предпочтительное определение столбца сервера SQL для использования со свойством LINQ to SQL Version? - PullRequest
4 голосов
/ 09 марта 2010

Мы используем свойство IsVersion в ColumnAttribute свойства в классе LINQ to SQL для оптимистичных проверок параллелизма. Каким должно быть определение столбца в базе данных?

В настоящее время мы используем

version_number int NOT NULL IDENTITY (1, 1) 

Нужна ли нам личность? Можем ли мы заставить LINQ to SQL обновить номер версии для нас? Единственная проблема, связанная с идентификацией, заключается в том, что в каждой строке свой номер Мы хотели бы видеть увеличение числа на 1 при обновлении строки.

Ответы [ 3 ]

4 голосов
/ 09 марта 2010

«Версия» строки должна обновляться каждый раз, когда строка модифицируется - уникальный идентификатор строки определенно соответствует , а не ! (обычно устанавливается один раз и никогда не меняется).

То, что вы ищете, это TIMESTAMP или ROWVERSION в SQL Server - раньше оно называлось TIMESTAMP, но поскольку это действительно просто 8-байтовый двоичный "счетчик" и не имеет ничего общего с время и / или дата (кроме того факта, что оно монотонно увеличивается со временем), команда SQL Server будет называть его ROWVERSION с этого момента.

Это тип данных, который обновляется SQL Server для внутреннего использования - вы не можете установить или вставить значение в такое поле самостоятельно. Гарантируется, что он будет меняться каждый раз при изменении строки, поэтому вы можете использовать его для обнаружения изменений в ваших данных.

См. Документы MSDN по версии строки или прочитайте статью Понимание TIMESTAMP (ROWVERSION) в SQL Server о ASP Alliance.

1 голос
/ 09 марта 2010

В качестве альтернативы вы можете использовать реальную временную метку, если данные меняются не слишком часто (я часто это делаю в финансовых приложениях, но могу гарантировать разные временные метки), или простой столбец подсчета.

1 голос
/ 09 марта 2010

Вы должны использовать тип данных Timestamp в таблицах базы данных. Это преобразуется в тип System.Data.Linq.Binary в ваших сущностях.

При использовании типа данных Timestamp SQL Server автоматически создает и увеличивает это значение для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...