Использование метки времени из sqlserver в платформе сущностей для получения только изменений, а не для перезагрузки всей таблицы / представления - PullRequest
1 голос
/ 19 февраля 2012

Я хотел бы иметь оптимизированную версию моего приложения на базе WinForms C # для более медленных соединений. По этой причине я хотел ввести столбец timestamp во все таблицы (это изменение) и загрузить большинство вещей в первый раз, когда это необходимо, а затем просто прочитать обновления / вставки / удаления, которые могли бы сделать другие люди, использующие приложение.

Чтобы в этом вопросе был пример, я добавил в таблицу столбец timestamp с именем Konsultanci. Учитывая, что эта таблица может быть большой, я хотел бы загрузить ее один раз, а затем проверить наличие обновлений / вставок. Простым способом загрузить все это я делаю так:

    private void KonsultantsListFill(ObjectListView listView)
    {
        using (var context = new EntityBazaCRM(Settings.sqlDataConnectionDetailsCRM)) {

            ObjectSet<Konsultanci> listaKonsultantow = context.Konsultancis;
            GlobalnaListaKonsultantow = listaKonsultantow.ToList(); // assign to global variable to be used all around the WinForms code.
        }
    }

Как мне проверить, изменилось ли что-нибудь на столе? Также как мне обрабатывать обновления в WinForms c#? Должен ли я проверять изменения на каждом tabpage выборе, открывать новые графические интерфейсы, сохранять, загружать клиентов, консультантов и так далее? Должен ли я обновлять все таблицы все время (например, запускать фоновый поток, который выполняется при каждом отдельном действии, которое выполняет пользователь? Или он должен выполняться только до конечной потребности в данных).

Я ищу здесь:

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

  2. Пример кода с Entity Framework с учетом столбца отметки времени? В конечном итоге код, который будет использоваться до выполнения чего-то, что требует данных?

1 Ответ

2 голосов
/ 19 февраля 2012

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

Что касается сохранения ваших данных свежими, вы можете выполнить отдельный запрос (возможно, в другом потоке), который находит все записи с LastModified>, чем в прошлый раз, когда вы проверяли, а затем "вставляет" (обновляет или вставляет) ихваш кеш контекст.Другим механизмом Entity Framework является использование метода Context.Refresh ().

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