Я пытаюсь использовать новый класс в SqlCe 3.5 SP2 с именем SqlCeChangeTracking
. Этот класс (предположительно) позволяет включить отслеживание изменений в таблице без использования репликации RDA или служб синхронизации.
Предполагая, что у вас есть открытый SqlCeConnection, вы включаете отслеживание изменений для таблицы следующим образом:
SqlCeChangeTracking tracker = new SqlCeChangeTracking(conn);
tracker.EnableTracking(TableName, TrackingKeyType.PrimaryKey,
TrackingOptions.All);
Это похоже на работу, вроде. Когда я открываю файл SDF и просматриваю его в SQL Server Management Studio, в таблице появляются три дополнительных поля: __sysChangeTxBsn
, __sysInsertTxBsn
и __sysTrackingContext
. Согласно разреженной документации, эти столбцы (вместе с системной таблицей __sysOCSDeletedRows
) используются для отслеживания изменений.
Проблема в том, что эти три столбца всегда содержат значения NULL для всех строк , независимо от того, что я делаю. Я могу добавлять, удалять, редактировать и т. Д., И эти столбцы остаются пустыми, несмотря ни на что (и в __sysOCSDeletedRows
) никогда не отображаются удаленные записи.
Я практически не нашел документации по этому классу, и обещанный MSDN API, похоже, не существует. Кто-нибудь знает, как успешно использовать этот класс?
Обновление: Я попытался изменить это на использование TrackingKeyType.Guid
, например так:
tracker.EnableTracking(TableName, TrackingKeyType.Guid,
TrackingOptions.All);
но это выдает SqlCeException 29010 "Таблица не имеет первичного ключа. [Имя таблицы = СОТРУДНИКИ]". Это странно, потому что я создаю таблицу следующим образом:
CREATE TABLE EMPLOYEES (BADGE NVARCHAR(5) PRIMARY KEY, NAME NVARCHAR(50),
DEPARTMENT NVARCHAR(10))
, чтобы он имел первичный ключ (и я вижу этот PK при открытии файла SDF в SQL Management Studio).
Обновление 2: Если я попытаюсь включить отслеживание с одним из двух других вариантов (TrackingKeyType.None
или TrackingKeyType.Max
), приложение мгновенно умирает и исчезает без трассировки, даже с блоком try / catch вокруг линии. Никогда хороший знак.