12

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

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

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

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

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

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

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

+0

Вы пробовали распространять файлы базы данных LocalDB? Вы можете подключиться к определенному файлу LocalDB. Например. 'connectionString =" Источник данных = (LocalDb) \ v12.0; AttachDbFilename = C: \ MyDatabase.mdf; Начальный каталог = MyDatabase; Integrated Security = True "'. Я не распространял свои приложения на клиентских компьютерах, поэтому не знаю, является ли установка * SqlLocalDB * проблемой или нет, но вы можете сделать снимок. – Gabrielius

+0

Установка SqlLocalDB не так проста. Особенно, чтобы заставить его работать, когда мне нужно удалить старый существующий экземпляр и установить новый. Но если подход Compact не подходит, я должен продолжать работать над этим. Благодарю. –

+0

Зачем ставить старый? Это твое? Вы можете добавить новый экземпляр с любым именем, которое вы хотите. Наверное, я сторонник LocalDB, потому что CE очень старый и умрет в конце концов. – Gabrielius

ответ

7

Сначала убедитесь, что вы успешно установили 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

EDIT

На свой комментарий, это только работает, если вы используете SQL Server CE 4.

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

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

ExampleTable 4.0

Table

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

+0

Спасибо за ответ. Я использую VS2013. SDK установлен правильно, поскольку я уже использовал его раньше с экземпляром LocalDB, и он работал. Я только пытался сменить CE, и теперь он не скомпилирует код, который, конечно же, мне пришлось настраивать, как при использовании 'SqlSyncScopeProvisioning', теперь используя' SqlCeSyncScopeProvisioning'. Я также использую SQL Compact 3.5, так как 4.0 не поддерживается последней средой синхронизации. Все DLL добавляются в решение. –

+0

@juergend Обновлен мой ответ – lokusking

+0

Использование версии 3.1 вместо 3.5 из Microsoft.Synchronization.Data.SqlServerCe.dll это для меня. Я не пробовал его с Compact 4.0, потому что вы можете читать на разных сайтах, которые не поддерживаются. –