이 연습에서는 OrdersScope-NC 동기화 범위와 관련된 아티팩트를 사용하여 SQL Express 데이터베이스 SyncExpressDB를 프로비전하는 콘솔 응용 프로그램을 만듭니다. 기본적으로 프로비전 프로세스에서는 OrdersScope-NC 범위 관련 데이터를 서버 데이터베이스와 동기화하기 위해 클라이언트 데이터베이스를 준비합니다. 클라이언트 프로비전에 대한 보다 자세한 기술 정보는 Provisioning the Clients을 참조하고, 필터링된 범위에 대한 자세한 내용은 방법: 데이터베이스 동기화를 위한 데이터 필터링(SQL Server)을 참조하십시오.
SQL Express 데이터베이스를 프로비전하려면
다음 목록에는 동기화 범위 OrdersScope-NC와 관련된 아티팩트를 사용하여 SQL Express 데이터베이스 SyncExpressDB를 프로비전하는 콘솔 응용 프로그램을 Visual Studio에서 만드는 단계가 포함되어 있습니다.
솔루션 탐색기에서 **솔루션 ‘SyncSQLServerAndSQLExpress’**를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 프로젝트를 클릭합니다.
프로젝트 형식에서 **Visual C#**을 선택하고 템플릿에서 콘솔 응용 프로그램을 선택합니다.
프로젝트 이름에 ProvisionFilteredScopeClient를 입력합니다.
확인을 클릭하여 새 프로젝트 대화 상자를 닫습니다.
솔루션 탐색기 창에서 ProvisionFilteredScopeClient를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭합니다.
Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer를 선택하고 확인을 클릭하여 참조 추가 대화 상자를 닫습니다.
Program.cs 파일 시작 부분에서 기존 using 문 다음에 아래의 using 문을 추가합니다.
using System.Data; using System.Data.SqlClient; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer;다음 문을 Main 메서드에 추가하여 Express 데이터베이스에 대한 SQL 연결을 만듭니다.
SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");다음 문을 Main 메서드에 추가하여 서버 데이터베이스에 대한 SQL 연결을 만듭니다.
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");중요
기본 인스턴스를 사용하지 않는 경우 위의 문에서 서버 이름을 사용자 서버의 인스턴스 이름으로 바꿉니다. 예를 들어 SQL Server 인스턴스의 이름이 MYSQLINSTANCE인 경우 (로컬)을 .\MYSQLINSTANCE로 바꿉니다.
다음 문을 Main 메서드에 추가하여 OrdersScope-NC 범위에 대한 설명을 SQL Server에서 가져옵니다. 이 문은 SqlSyncDescriptionBuilder 클래스에서 GetDescriptionForScope(String, SqlCeConnection) 메서드를 호출하여 서버에서 OrdersScope-NC에 대한 설명을 검색합니다.
DbSyncScopeDescription 클래스를 사용하여 동기화 범위의 이름 및 동기화할 테이블 목록을 지정합니다. 이러한 정보는 명시적으로 지정하거나 GetDescriptionForScope(String, String, SqlConnection) 메서드를 사용하여 데이터베이스를 쿼리함으로써 얻을 수 있습니다. 이 연습에서는 SqlSyncDescriptionBuilder 클래스의 GetDescriptionForScope(String, String, SqlConnection) 메서드를 사용하여 서버에서 범위에 대한 설명을 검색합니다.
// get description for the OrdersScope-NC scope from the SyncDB server database DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("OrdersScope-NC", serverConn);다음 문을 추가하여 동기화 관련 아티팩트를 통해 SyncExpressDB 데이터베이스를 프로비전합니다. 이 코드에서는 SqlCeSyncScopeProvisioning 개체를 만들고, 클라이언트 데이터베이스에서 Orders 테이블을 만들도록 플래그를 설정하고, 프로비전 프로세스를 실행하여 범위 관련 아티팩트를 클라이언트에 추가합니다. 동기화 범위 관련 아티팩트를 사용하여 SQL Express 데이터베이스를 프로비전하는 대략적인 단계는 다음과 같습니다.
이전 단계에서 가져온 DbSyncScopeDescription을 기반으로 SqlCeSyncScopeProvisioning 클래스의 인스턴스를 만들고 SQL Express 데이터베이스에 대한 연결을 만듭니다. SqlCeSyncScopeProvisioning 클래스는 DbSyncScopeDescription 개체에서 나타내는 특정 범위에 대한 SQL Express 데이터베이스의 프로비전을 표시합니다.
SqlCeSyncScopeProvisioning 개체에서 Apply() 메서드를 호출하여 SyncExpressDB 데이터베이스의 변경 내용 추적 인프라를 만드는 프로비전 프로세스를 시작합니다.
참고
CreateOrUseExisting은 Sync Framework에서 사용하는 기본값이므로 DbSyncCreationOption 값으로 CreateOrUseExisting을 사용하여 SetCreateTableDefault(DbSyncCreationOption) 메서드를 명시적으로 호출할 필요가 없습니다. Products 테이블은 프로비전 프로세스 중에 Compact 데이터베이스에 자동으로 만들어집니다. 범위가 구성된 경우 SetCreateTableDefault(DbSyncCreationOption) 메서드를 사용하여 기본 테이블을 만들지 여부를 지정합니다.
// create a provisioning object SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc); // start the provisioning process clientProvision.Apply();솔루션 탐색기에서 ProvisionFilteredScopeClient를 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다.
솔루션 탐색기에서 ProvisionFilteredScopeClient를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.
Ctrl+F5를 눌러 프로그램을 실행합니다.
Enter 키를 눌러 명령 프롬프트 창을 닫습니다.
SQL Server Management Studio에서 .\SQLEXPRESS 노드를 마우스 오른쪽 단추로 클릭하고 새로 고침을 클릭합니다.
.\SQLEXPRESS 노드에서 데이터베이스, SyncExpressDB, 테이블을 차례로 확장합니다. 이 경우 프로비전 프로세스에서 만든 테이블이 표시되어야 합니다. 프로비전 프로세스에서 만든 트리거 및 저장 프로시저와 같은 다른 개체도 있습니다.
Visual Studio와 SQL Server Management Studio를 열어 둡니다.
전체 코드 예제
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
namespace ProvisionFilteredScopeClient
{
class Program
{
static void Main(string[] args)
{
// create connection to the SQL Express database
SqlConnection clientConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=SyncExpressDB; Trusted_Connection=Yes");
// create connection to the server database
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
// get description for the OrdersScope-NC scope from the SyncDB server database
DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("OrdersScope-NC", serverConn);
// create a provisioning object
SqlSyncScopeProvisioning clientProvision = new SqlSyncScopeProvisioning(clientConn, scopeDesc);
// create table if it does not already exist in the SyncExpressDB database
clientProvision.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
// start the provisioning process
clientProvision.Apply();
}
}
}