Практическое руководство. Добавление кэша локальной базы данных в N-уровневое приложение
Обновлен: Ноябрь 2007
Кэш локальной базы данных, в контексте Visual Studio, является базой данных SQL Server Compact 3.5, настроенной на синхронизацию данных с удаленной базы данных при помощи Microsoft Synchronization Services для ADO.NET. В данном пошаговом руководстве содержатся пошаговые инструкции по добавлению базы данных SQL Server Compact 3.5 в приложение, созданное в разделе Пошаговое руководство. Создание многоуровневого приложения для работы с данными.
В этом пошаговом руководстве вы узнаете, как выполнить следующие задачи:
Добавить в проект элемент "Кэш локальной базы данных".
Настроить синхронизацию данных.
Включить операции по синхронизации в существующую службу данных.
Изменить код загрузки данных таким образом, чтобы он извлекал таблицу Customers из кэша локальной базы данных.
Добавить код запуска процесса синхронизации.
Обязательные компоненты
Для выполнения данного пошагового руководства необходимо следующее:
Решение и связанные проекты, созданные в Пошаговое руководство. Создание многоуровневого приложения для работы с данными.
Доступ к образцу базы данных "Борей". Дополнительные сведения см. в разделе Практическое руководство. Установка образцов баз данных.
Примечание. |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Открытие решения NTierWalkthrough
Чтобы открыть решение NTierWalkthrough
В меню Файл выберите Открыть, нажмите кнопку Проект/решение и перейдите в папку, где находится файл NTierWalkthrough.sln.
Примечание. Файл NTierWalkthrough.SLN создается в разделе Пошаговое руководство. Создание многоуровневого приложения для работы с данными и является необходимым условием для выполнения этого пошагового руководства. Выполните процедуру, описанную в разделе Пошаговое руководство. Создание многоуровневого приложения для работы с данными, сохранив все проекты по окончании, если вы еще этого еще не сделали.
Добавление кэширования локальной базы данных в NTierWalkthrough
Так как кэш локальной базы данных является базой данных SQL Server Compact 3.5, расположенной на стороне клиента, добавьте к проекту PresentationTier кэш локальной базы данных. Поскольку в этом пошаговом руководстве показано, как кэшировать таблицу Customers, назовите кэш локальной базы данных CustomersCache.
Примечание. |
---|
В данном пошаговом руководстве кэш локальной базы данных называется CustomersCache, поскольку он использует только таблицу Customers, однако в кэш локальной базы данных можно добавить несколько таблиц. |
Чтобы добавить кэширование локальных данных на уровне представления
В окне Обозреватель решений щелкните правой кнопкой мыши элемент PresentationTier и нажмите Добавить новый элемент.
Выберите шаблон Кэш локальной базы данных.
Введите CustomersCache в поле Имя.
Нажмите кнопку Добавить.
Откроется диалоговое окно Настройка синхронизации данных.
Настройка синхронизации данных
Чтобы настроить синхронизацию данных, выберите подключение данных к серверу, а также таблицы, которые требуется кэшировать локально в приложении. В данном пошаговом руководстве установите серверное подключение к базе данных "Борей" на сервере SQL Server и добавьте таблицу Customers к локальному кэшу. Кроме того, поскольку кэш локальный базы данных добавляется в многоуровневое приложение, необходимо установить дополнительные параметры для создания компонентов синхронизации сервера в отдельном проекте: DataService.
Чтобы настроить синхронизацию данных в многоуровневом приложении
Задайте Подключение сервера к базе данных "Борей" на сервере SQL Server.
Нажмите кнопку Добавить, чтобы открыть диалоговое окно Настройка таблиц для автономной работы.
Установите флажок, связанный с таблицей Customers, и нажмите OK. (Оставьте значения по умолчанию.)
Щелкните Дополнительно.
В списке Размещение серверного файла проекта выберите DataService.
Нажмите кнопку OK.
Создаются компоненты синхронизации, данные синхронизируются в первый раз (в проекте создается и заполняется данными локальная база данных), и открывается Мастер конфигурации источников данных.
Выберите таблицу Customers и установите флажок, связанный с ней, на странице Выбор объектов базы данных.
Введите LocalNorthwindCustomers в поле Имя набора данных (DataSet) и нажмите кнопку Готово.
Включение синхронизации в существующих службах данных
Созданные компоненты синхронизации были добавлены в проект DataService, но их нужно реализовать при помощи службы. Созданный SyncContract содержит информацию, необходимую службе. Эти сведения выводятся в виде комментариев в файле. Копировать необходимые сведения в соответствующую секцию файла App.config службы.
Чтобы добавить сведения о службе в файле App.config
Откройте файл CustomersCache.Server.SyncContract, щелкнув его два раза в окне Обозреватель решений.
Найдите закомментированную строку следующего вида:
<endpoint address ="" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
Скопируйте строку без знака комментария.
Откройте файл App.config проекта DataService, щелкнув его два раза в окне Обозреватель решений.
Найдите комментарий <!-- Metadata Endpoints -->. Вставьте строку, скопированную на шаге 3, под строкой, которая начинается с <endpoint address = "mex".
Введите имя (например SyncServer) в качестве значения только что вставленного адреса конечной точки, чтобы получить код, аналогичный приведенному ниже:
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <endpoint address ="SyncServer" binding="wsHttpBinding" contract="DataService.ICustomersCacheSyncContract"/>
В меню Построение выберите Построить решение.
Чтобы добавить операции службы синхронизации к существующей службе данных
Откройте файл CustomersCache.Server.SyncContract, щелкнув его два раза в окне Обозреватель решений.
Измените имя класса с CustomersCacheSyncService на Service1. В следующем пошаговом руководстве кода показано объявление класса, как оно должно выглядеть после изменения имени класса. (Пользователям C# необходимо также изменить имя конструктора.)
Partial Public Class Service1 Inherits Object Implements ICustomersCacheSyncContract ...
public partial class Service1 : object, ICustomersCacheSyncContract {...
Для пользователей C#:
Измените объявление класса для Service1 (в файле Service1.cs), сделав его разделяемым классом, в результате объявление выглядит следующим образом:
public partial class Service1 : object, ICustomersCacheSyncContract { private CustomersCacheServerSyncProvider _serverSyncProvider; public Service1() {...
В меню Построение выберите Построить решение.
Поскольку операции синхронизации были добавлены к существующей службе, необходимо обновить ссылку на службу в проекте PresentationTier.
Чтобы обновить ссылку на службу
В окне Обозреватель решений найдите ServiceReference1 в проекте PresentationTier.
Щелкните правой кнопкой мыши элемент ServiceReference1 и выберите команду Обновить ссылку на службу.
Изменение формы для загрузки данных таблицы Customers из локального кэша
Форма на уровне представления в настоящее время получает данные из службы данных. Таким образом необходимо изменить код для загрузки данных из локальной копии таблицы Customers в базе SQL Server Compact 3.5. В таблицу Orders по-прежнему загружаются данные, возвращаемые DataService.
Чтобы изменить форму Form1 для загрузки данных таблицы Customers из кэша локальной базы данных
Откройте форму Form1 в редакторе кода.
Замените существующий код Form1_Load следующим:
Using DataSvc As New ServiceReference1.Service1Client ' Create a CustomersTableAdapter to load data from ' the local database cache. Dim CustomersTableAdapter As New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter NorthwindDataSet.Customers.Merge(CustomersTableAdapter.GetData) NorthwindDataSet.Orders.Merge(DataSvc.GetOrders) End Using
using (ServiceReference1.Service1Client DataSvc = new ServiceReference1.Service1Client()) { LocalNorthwindCustomersTableAdapters.CustomersTableAdapter customersTableAdapter = new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter(); northwindDataSet.Customers.Merge(customersTableAdapter.GetData()); northwindDataSet.Orders.Merge(DataSvc.GetOrders()); }
Тестирование приложения
Запустите приложение. Данные извлекаются и из кэша локальной базы данных, и из службы данных.
Чтобы протестировать приложение
Нажмите клавишу F5.
Данные таблицы Customers извлекаются из локальной базы данных, а данные таблицы Orders — из службы данных.
Закройте форму.
Синхронизация данных
Теперь, когда уровень представления настроен для отображения таблиц из правильных источников, следующим шагом является добавление кода для запуска синхронизации. Добавьте на форму кнопку для начала процесса синхронизации.
Чтобы синхронизировать данные между кэшем локальной базы данных и удаленной базой данных
Откройте форму Form1 в режиме конструктора.
Щелкните на форме элемент Toolstrip и добавьте на Toolstrip кнопку.
Назовите кнопку SyncButton.
Дважды щелкните кнопку SyncButton, чтобы создать обработчик событий SyncButton_Click.
В следующем коде запускается процесс синхронизации. Добавьте его в обработчик событий.
Dim syncAgent As CustomersCacheSyncAgent = New CustomersCacheSyncAgent Using syncClient As New ServiceReference1.CustomersCacheSyncContractClient syncAgent.RemoteProvider = New Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient) Dim syncStats As Microsoft.Synchronization.Data.SyncStatistics = syncAgent.Synchronize NorthwindDataSet.Customers.Merge(New LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData()) Dim syncSummary As String = "Total changes downloaded: " & _ syncStats.TotalChangesDownloaded.ToString() & vbCrLf & _ "Last successful synchronization: " & _ syncStats.SyncCompleteTime.ToString MessageBox.Show(syncSummary) End Using
CustomersCacheSyncAgent syncAgent = new CustomersCacheSyncAgent(); using (ServiceReference1.CustomersCacheSyncContractClient syncClient = new ServiceReference1.CustomersCacheSyncContractClient()) { syncAgent.RemoteProvider = new Microsoft.Synchronization.Data.ServerSyncProviderProxy(syncClient); Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize(); northwindDataSet.Customers.Merge(new LocalNorthwindCustomersTableAdapters.CustomersTableAdapter().GetData()); string syncSummary = "Total changes downloaded: " + syncStats.TotalChangesDownloaded.ToString() + Environment.NewLine + "Last successful synchronization: " + syncStats.SyncCompleteTime.ToString(); MessageBox.Show(syncSummary); }
Данные таблицы Customers извлекаются из локальной базы данных, а данные таблицы Orders — из службы данных.
Закройте форму.
Тестирование приложения
Чтобы протестировать приложение
Нажмите клавишу F5.
Во время работы приложения используйте Обозреватель серверов/Обозреватель баз данных (или другое средство управления базами данных), чтобы подключиться к удаленному серверу баз данных и изменить некоторые записи.
В окне Обозреватель серверов/Обозреватель баз данных найдите таблицу Customers на удаленном сервере баз данных (не подключенном к Northwind.sdf).
Щелкните правой кнопкой мыши таблицу Customers и выберите команду Показать таблицу данных.
Измените одну или несколько записей и зафиксируйте изменения. (Переместите курсор с измененной строки.)
Вернитесь в форму и нажмите кнопку SyncButton.
Убедитесь, что изменения в удаленной базе данных синхронизированы с локальной базой данных и отображаются в сетке.
Закройте форму. (Остановите отладку.)
Следующие действия
В зависимости от требований приложения существуют несколько шагов, выполнение которых может потребоваться после добавления кэша локальной базы данных в многоуровневое приложение. Например, можно внести в приложение следующие усовершенствования:
Добавить проверку к набору данных. Дополнительные сведения см. в разделе Пошаговое руководство. Добавление проверки данных в многоуровневое приложение.
Включить двунаправленную синхронизацию. Дополнительные сведения см. в разделе Практическое руководство. Настройка локальной и удаленной баз данных для двунаправленной синхронизации.
См. также
Задачи
Практическое руководство. Добавление кода для наборов данных в многоуровневых приложениях
Пошаговое руководство. Добавление проверки данных в многоуровневое приложение
Пошаговое руководство. Создание произвольно подключаемого приложения
Основные понятия
Общие сведения о N-уровневом приложении для обработки данных
Общие сведения о произвольно подключаемых приложениях
SQL Server Compact 3.5 и Visual Studio