c# sql-server synchronization sql-server-ce microsoft-sync-framework

c# - MS Sync Framework y SQL Server Compact



sql-server synchronization (1)

Primero, asegúrese de haber instalado con éxito el SDK .

Después de esto, asegúrese de haber agregado las siguientes referencias:

  • Microsoft.Synchronization.Data.dll,

  • Microsoft.Synchronization.Data.Server.dll

  • Microsoft.Synchronization.Data.SqlServer.dll
  • Microsoft.Synchronization.Data.SqlServerCe.dll

También en mi caso, trabajó con la adición

  • System.Data.SqlServerCe - 4.0

EDITAR

En contra de su comentario, esto solo funciona si usa SQL Server CE 4.

Lo he intentado ahora con SQL Server CE 3.5 y, de hecho, podría reproducir su problema.

El cambio a SQL Server CE 4.0 lo solucionó.

Ejemplo de tabla 4.0

TestCode

var scopeDesc = new DbSyncScopeDescription("MyScope"); var tbl = new DbSyncTableDescription("TestTable"); var pkColumn = new DbSyncColumnDescription("Id", "int"); pkColumn.IsPrimaryKey = true; tbl.Columns.Add(pkColumn); tbl.Columns.Add(new DbSyncColumnDescription("Name", "nvarchar(254)")); scopeDesc.Tables.Add(tbl); var clientConn = new SqlCeConnection(@"Data Source=test.sdf;Persist Security Info=False;"); var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); clientProvision.Apply();

Resultado

Todo compila muy bien. Después de seguir los pasos anteriores, debería poder migrar fácilmente su código a SQL Server CE

Desarrollo una aplicación Windows C # que puede funcionar en modo Online y Offline.
Cuando está en modo en línea, se conecta a un servidor SQL. En modo fuera de línea, se conecta a un DB local.

Utilizo Microsoft Sync Framework 2.1 para sincronizar las 2 bases de datos bajo demanda.

Hasta ahora utilicé una instancia LocalDB de SQL Server como la base de datos local. Pero es un dolor configurar el sistema automáticamente durante el proceso de instalación de mi aplicación. Por lo tanto, debo usar SQL Server Compact 3.5 o 4.0, que es muy fácil de distribuir (viene en un solo archivo).

Pero no puedo ni siquiera compilar el código de aprovisionamiento de Compact DB:

DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("MyScope"); SqlCeConnection clientConn = new SqlCeConnection(OfflineConnectionString); var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); clientProvision.Apply();

que utilicé antes (sin las clases Ce ) pero SqlCeSyncScopeProvisioning no se puede resolver.

Algo está terriblemente mal aquí.
¿Cómo puedo sincronizar mi CompactDB para distribuir esto como mi base de datos local?