12

Çevrimiçi ve Çevrimdışı modda çalışabilen bir Windows C# uygulaması geliştiriyorum.
Çevrimiçi moddayken, bir SQL Server'a bağlanır. Çevrimdışı modda yerel bir DB'ye bağlanır.MS Sync Framework ve SQL Server Sıkıştırması

2 veri tabanını isteğe göre senkronize etmek için Microsoft Sync Framework 2.1 kullanıyorum. Şimdiye kadar yerel veritabanı olarak bir SQL Server'ın LocalDB örneğini kullandım. Ancak, uygulamamın yükleme işlemi sırasında sistemi otomatik olarak kurmak bir acıdır. Bu yüzden dağıtımı çok kolay olan SQL Server Compact 3.5 veya 4.0'ı kullanmam gerekiyor (tek bir dosyada geliyor).

Ama bile Kompakt DB hazırlık kodu derlemek alınamıyor: I (Ce sınıflar olmadan) önce kullanılan

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

ama SqlCeSyncScopeProvisioning çözülemeyen.

Burada bir şey çok yanlıştır.
CompactDB'mi yerel veritabanım olarak dağıtmak için nasıl eşitleyebilirim?

+0

'a kolayca taşımanız gerekir LocalDB veritabanı dosyalarını dağıtmayı denediniz mi? Belirli bir LocalDB dosyasına bağlayabilirsiniz. Örneğin. 'connectionString =" Veri Kaynağı = (LocalDb) \ v12.0; AttachDbFilename = C: \ MyDatabase.mdf; İlk Katalog = MyDatabase; Entegre Güvenlik = Doğru "'. Uygulamalarımı istemci bilgisayarlara dağıtmadım, bu yüzden yükleme * SqlLocalDB * sorunlu ya da değil, bilmiyorum, ama bir şans verebilir. – Gabrielius

+0

SqlLocalDB'yi yüklemek çok kolay değil. Özellikle eski bir varolan örneği kaldırmak ve yenisini yüklemek zorunda kaldığımda çalışır hale getirmek için. Ancak, Kompakt yaklaşım başarısız olursa, bunun üzerinde çalışmaya devam etmeliyim. Teşekkürler. –

+0

Neden eski olanı kaldıralım? Bu senin mi? İstediğiniz adla yeni bir örnek ekleyebilirsiniz. Sanırım LocalDB'yi savunuyorum çünkü CE çok eski ve sonunda ölecek. – Gabrielius

cevap

7

İlk önce sdk yüklüyorsunuz? ,

  • Microsoft.Synchronization.Data.Server.dll

  • Microsoft

    • Microsoft.Synchronization.Data.dll: Bundan sonra

      , aşağıdaki referanslar eklemiş emin olun .Senkronizasyon.Data.SqlServer.dll

    • Microsoft.Synchronization.Data.SqlServerCe.dll
    Eğer kullanırsanız çalışan Yorumlarınız Karşı 4,0
  • DÜZENLEME

    , bu sadece -

    Ayrıca benim durumumda bu

    • System.Data.SqlServerCe ekleyerek çalıştı SQL Server CE 4.

      Şimdi SQL Server CE 3.5 ile denedim ve tapu, senin sorununu yeniden üretebilirim.

      SQL Server CE 4.0'a geçiş, bunu düzeltildi.

      ÖrnekTablo 4.0

      Table

      deneme kodunda

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

      Sonucu

      Her şey güzel derler. Yukarıdaki adımları izledikten sonra kodunuzu SQL Server CE

    +0

    Cevabınız için teşekkürler. VS2013 kullanıyorum. SDK, LocalDB örneğiyle daha önce kullanmış olduğumdan ve doğru şekilde çalıştığından, doğru şekilde yüklenmiştir. Ben sadece CE'ye geçmeye çalıştım ve şu anda 'SqlCeSyncScopeProvisioning' i kullanmak için 'SqlSyncScopeProvisioning' kullanmaktan nasıl ayarlamak istediğim kodu derlemiyor. En son eşitleme çerçevesiyle 4.0 desteklenmediğinden SQL Compact 3.5 kullanıyorum. Tüm DLL'ler çözüme eklenmiştir. –

    +0

    @juergend Benim Yanıt – lokusking

    +0

    Microsoft.Synchronization.Data.SqlServerCe.dll 3.5 yerine Sürüm 3.1'i kullanarak bunu benim için soved. Compact 4.0 ile denemedim, çünkü desteklenmeyen çeşitli sitelerde okuyabilirsiniz. –