Passo a passo: definindo um escopo e provisionando um banco de dados servidor
Para preparar o banco de dados de servidor para sincronização, você precisará descrever um escopo de sincronização e provisionar o banco de dados servidor com artefatos relacionados ao escopo.
Ao descrever um escopo de sincronização, você define o que deseja sincronizar. Um escopo de sincronização é um conjunto de tabelas que devem ser sincronizadas como uma única unidade. As tabelas talvez já existam no banco de dados, ou elas podem ser descritas usando o modelo de objeto do Sync Framework e depois serem geradas em tempo de execução quando o repositório subjacente é provisionado. Neste passo a passo, você usará a tabela Products que já existe no banco de dados servidor.
O provisionamento de um banco de dados envolve a adição de artefatos relacionados ao escopo de sincronização, como tabelas de rastreamento, gatilhos e procedimentos armazenados, ao banco de dados. Esses artefatos são usados pelo processo de sincronização em tempo de execução. Opcionalmente, a tabela base também é adicionada ao banco de dados conforme especificado no parágrafo anterior. Para obter mais detalhes técnicos sobre o provisionamento, consulte Como configurar e executar a sincronização de bancos de dados (SQL Server) e Provisionamento para sincronização (SQL Server).
Neste passo a passo, você criará um aplicativo de console que define um escopo de sincronização denominado ProductsScope, que inclui a tabela Products, e provisiona o banco de dados do SQL Server criado no passo a passo anterior com artefatos relacionados ao escopo de sincronização.
Para definir um escopo e provisionar um servidor com artefatos relacionados a escopo
Inicie o Visual Studio 2008: clique em Iniciar, aponte para Programa, aponte para Microsoft Visual Studio 2008 e clique em Microsoft Visual Studio 2008.
Clique em Arquivo na barra de menus, aponte para Novo e clique em Projeto.
Selecione Visual C# em Tipos de Projeto e selecione Aplicativo do Console em Modelos.
Digite ProvisionServer para o nome do projeto, C:\ para Local e SyncSQLServerAndSQLExpress para Nome da Solução.
Clique em OK para fechar a caixa de diálogo Novo Projeto.
Na janela Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionServer e clique em Adicionar Referência.
Selecione Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer na guia .NET. Estes são os assemblies enviados com o Microsoft Sync Framework.
Clique em OK para fechar a caixa de diálogo Adicionar Referência.
Adicione as instruções using a seguir ao início do arquivo Program.cs após as instruções using existentes. Esses namespaces contêm as classes que você usará no código deste aplicativo de console.
using System.Data; using System.Data.SqlClient; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer;
Adicione a instrução a seguir ao método Main para criar uma conexão com o banco de dados servidor SyncDB.
// connect to server database SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
Importante
Na instrução anterior, substitua o nome do servidor pelo nome da instância do seu servidor, caso não esteja usando a instância padrão. Por exemplo: se o nome de sua instância do SQL Server for MYSQLINSTANCE, substitua (local) por .\MYSQLINSTANCE.
Adicione as linhas de código a seguir ao método Main para definir um escopo de sincronização com base na tabela Products do banco de dados SyncDB. Esse código cria o escopo de sincronização ProductsScope, obtém a descrição da tabela Products no banco de dados SyncDB e adiciona a descrição a ProductsScope. Etapas de alto nível para definir um escopo de sincronização:
Crie uma instância da classe DbSyncScopeDescription. A classe DbSyncScopeDescription é usada para especificar o nome do escopo de sincronização e a lista de tabelas a serem sincronizadas. As tabelas são especificadas com a classe DbSyncTableDescription.
Crie uma instância da classe DbSyncTableDescription com base no esquema da tabela Products recuperada do banco de dados servidor SyncDB. A classe DbSyncTableDescription é usada para especificar o nome da tabela, colunas da tabela a serem sincronizadas, tipos de dados da tabela e outras informações necessárias para a sincronização. Essas informações podem ser especificadas explicitamente ou podem ser obtidas através da consulta ao banco de dados usando o método GetDescriptionForTable(String, SqlConnection).
Neste passo a passo, você usará o método GetDescriptionForTable(String, SqlConnection) da classe SqlSyncDescriptionBuilder para recuperar a descrição da tabela.
Adicione o objeto DbSyncTableDescription à coleção Tables do objeto DbSyncScopeDescription usando o método Add.
// define a new scope named ProductsScope DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope"); // get the description of the Products table from SyncDB dtabase DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn); // add the table description to the sync scope definition scopeDesc.Tables.Add(tableDesc);
Adicione as linhas de código a seguir ao método Main para provisionar o SQL Server com artefatos relacionados à sincronização. Este código cria um objeto SqlSyncScopeProvisioning, ignora a criação da tabela Products no servidor pois ela já existe e provisiona o banco de dados SyncDB com artefatos relacionados a escopo. Etapas de alto nível para provisionar o banco de dados servidor com artefatos relacionados ao escopo de sincronização:
Crie uma instância da classe SqlSyncScopeProvisioning com base no objeto DbSyncScopeDescription e uma conexão com o banco de dados servidor. A classe SqlSyncScopeProvisioning representa o provisionamento de um banco de dados SQL Server para um escopo específico que é representado por um objeto DbSyncScopeDescription.
Invoque o método SetCreateTableDefault(DbSyncCreationOption) especificando o valor DbSyncCreationOption como Skip porque a tabela Products já existe no banco de dados servidor. O método SetCreateTableDefault(DbSyncCreationOption) é usado para especificar se tabelas base devem ser criadas quando um escopo é configurado.
Invoque o método Apply()()()() no objeto SqlSyncScopeProvisioning para iniciar o processo de provisionamento, que cria a infraestrutura de controle de alterações no banco de dados servidor.
// create a server scope provisioning object based on the ProductScope SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc); // skipping the creation of table since table already exists on server serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip); // start the provisioning process serverProvision.Apply();
No Gerenciador de Soluções, clique com o botão direito do mouse em ProvisionServer e clique em Compilar.
Pressione Ctrl+F5 para executar o programa.
Pressione ENTER para fechar a janela do prompt de comando.
No SQL Server Management Studio, expanda o nó SyncDB e Tables. Deverão aparecer as seguintes tabelas adicionais criadas pelo processo de provisionamento: Products_Tracking, schema_info, scope_config e scope_info. Há outros objetos de banco de dados, como gatilhos e procedimentos armazenados, criados pelo processo de provisionamento.
Mantenha o Visual Studio e o SQL Server Management abertos.
Exemplo de código completo
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
namespace ProvisionServer
{
class Program
{
static void Main(string[] args)
{
// create connection to the server database
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
// define a new scope named ProductsScope
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope");
// get the description of the Products table from SyncDB dtabase
DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn);
// add the table description to the sync scope definition
scopeDesc.Tables.Add(tableDesc);
// create a server scope provisioning object based on the ProductScope
SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
// skipping the creation of table since table already exists on server
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
// start the provisioning process
serverProvision.Apply();
}
}
}
Consulte também
Outros recursos
Como configurar e executar a sincronização de bancos de dados (SQL Server)