Самостоятельно отслеживаемые объекты и столбец меток времени в базе данных - PullRequest
1 голос
/ 05 июля 2010

В сценарии оптимистичного параллелизма для веб-приложения я планирую дать каждой таблице столбец меток времени (sqlserver), сравнимый с guid. Linq для сущностей будет затем генерировать sql-запросы на обновление, такие как WHERE id = @p0 AND timestamp = @p1, когда каждый украшает столбец отметки времени с определенным атрибутом в Entity Framework. Когда количество возвращенных обновленных записей равно 0, мы обнаружили исключение параллелизма.

Во многих постах я читаю о Self Tracking Entities, который может быть альтернативным или лучшим решением. Но я не увидел никакого преимущества перед «простым» методом меток времени, описанным выше. Помимо сценария, в котором база данных является неизменной и не предлагает столбец отметки времени.

Какое решение лучше и почему?

EDIT

Юрий Тарабанко правильно утверждает, что STE - это другая концепция. Однако ответ Зеешанхирани показывает, что проверка параллелизма является одним из основных мотивов для отслеживания изменений.

Давайте перефразируем вопрос: зачем кому-то использовать концепцию STE для проверки параллелизма, где метод «столбца метки времени» выглядит намного проще.

Ответы [ 2 ]

1 голос
/ 06 июля 2010

Вы смешиваете две концепции здесь. STE совсем не о параллелизме.

Самостоятельно отслеживающие сущности просто знают, как выполнять свои отслеживания изменений относительно того, как эти изменения были сделаны. Таким образом, вы всегда знаете, каково текущее состояние объекта графа объектов. И вам не нужно вызывать дополнительное обнаружение изменений.

Что такое STE .

РЕДАКТИРОВАТЬ:

«проверка параллелизма является одним из основных мотивов для отслеживания изменений»

AFAIK STE и POCO используют один и тот же подход к проверке параллелизма, который просто приводит к дополнительному условию (условиям) в операторе обновления, отправляемом в БД. Эквивалентно этому:

UPDATE [schema].[table] 
     SET [prop1] = value1, ... 
     WHERE [key] = key_value 
          AND [concurrency_prop_1] = concurrency_prop1_old_value 
          AND [concurrency_prop_2] = concurrency_prop2_old_value

Таким образом, «основной мотив» для отслеживания изменений, ну, в общем, для отслеживания изменений в N-уровневом приложении.

0 голосов
/ 07 июля 2010

Self Tracking Entity фактически работает с концепцией, которую вы описали.STE в основном отслеживает изменения объекта, когда контекст отсутствует.Однако, когда он отправляет свои изменения обратно на сервер, используя службу WCF, он отправляет текущие значения свойства, новое состояние объекта, а также исходные значения столбца первичного ключа, значение независимой ассоциации и исходное значение для любых столбцов.помеченные как Concurrency = Fixed в модели данных объекта.

...