Подтвердить что ты не робот

MS Sync Framework и SQL Server Compact

Я разрабатываю приложение Windows С#, которое может работать в режиме онлайн и в автономном режиме.
В режиме Online он подключается к SQL Server. В автономном режиме он подключается к локальной базе данных.

Я использую Microsoft Sync Framework 2.1 для синхронизации двух баз данных по запросу.

До сих пор я использовал экземпляр LocalDB SQL Server в качестве локальной базы данных. Но больно настраивать систему автоматически во время процесса установки моего приложения. Поэтому мне сложно использовать SQL Server Compact 3.5 или 4.0, который очень легко распространять (входит в один файл).

Но я не могу заставить его даже скомпилировать код инициализации Compact DB:

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

который я использовал ранее (без классов Ce), но SqlCeSyncScopeProvisioning не может быть разрешен.

Здесь что-то ужасно. Как я могу синхронизировать мой CompactDB, чтобы распространять его как мою локальную базу данных?

4b9b3361

Ответ 1

Сначала убедитесь, что вы успешно установили sdk?

После этого убедитесь, что вы добавили следующие ссылки:

  • Microsoft.Synchronization.Data.dll,

  • Microsoft.Synchronization.Data.Server.dll

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

Также в моем случае он работал с добавлением

  • System.Data.SqlServerCe - 4.0

ИЗМЕНИТЬ

Против вашего комментария, это только, если вы используете SQL Server CE 4.

Я попробовал это сейчас с SQL Server CE 3.5 и действительно смог воспроизвести вашу проблему.

Переключение на SQL Server CE 4.0 исправило его.

ExampleTable 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();

Результат

Все хорошо компилируется. После выполнения вышеуказанных шагов вы сможете легко перенести свой код на SQL Server CE