1

저는 SYNC Framework를 사용하여 2 개의 다른 데이터베이스를 병합했습니다. 내 데이터베이스가 같은 열이면 simple.i는 easly 일치하고 서로 동기화 할 수 있습니다. 하지만 내가 추가하고 몇 가지 드문 열을 가지고있는 테이블 내부의 일부 열을 제거합니다. 동기화는 작동하지 않는 열을 잡을 수 없습니다. 제게 기사 링크를 보내지 마십시오. 나는 그들 모두를 읽고있다. 아래Sync FrameWork를 사용하여 다른 열이있는 두 개의 테이블을 동기화하는 방법은 무엇입니까?

내 욕망 :

http://jtabadero.wordpress.com/2011/08/19/part-4-synchronizing-tables-with-different-table-names-and-column-names/

enter image description here 내 SQL 스크립트 :


GO 

CREATE TABLE [dbo].[Customer](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](50) NULL, 
    [SurName] [nvarchar](50) NULL, 
    [Age] [int] NULL, 
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

USE [clientDb3] 
GO 

/****** Object: Table [dbo].[Customer] Script Date: 4/17/2014 10:15:45 AM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Customer](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](50) NULL, 
    [SurName] [nvarchar](50) NULL, 
    [Description] [nvarchar](50) NULL, 
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 


C 번호 :

당신이 달성하고자하는 일에 대해 특별한 아무것도

namespace syncSample1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string serverConn = @"data source=H2014-008\SQLEXPRESS;initial catalog=serverDb3;integrated security=True;MultipleActiveResultSets=True;"; 
      string clientConn = @"data source=H2014-008\SQLEXPRESS;initial catalog=clientDb3;integrated security=True;MultipleActiveResultSets=True;"; 

      using (var serverConnection = new SqlConnection(serverConn)) 
      using(var clientConnection = new SqlConnection(clientConn)) 
      { 

       var provider1 = new SqlSyncProvider("scopeTest",serverConnection); 
       var provider2 = new SqlSyncProvider("scopeTest",clientConnection); 


       //config 

       PrepareServerForProvisioning(provider1); 
       PrepareClientForProvisioning(provider2, serverConnection); 

       //sync 
       SyncOrchestrator sync = new SyncOrchestrator(); 
       sync.LocalProvider= provider1; 
       sync.RemoteProvider=provider2; 
       sync.Direction = SyncDirectionOrder.UploadAndDownload; 
       sync.Synchronize(); 

       Console.Read(); 

      } 


     } 

     private static void PrepareServerForProvisioning(SqlSyncProvider provider) 
     { 
      SqlConnection connection = (SqlConnection)provider.Connection; 
      SqlSyncScopeProvisioning config = new SqlSyncScopeProvisioning(connection); 
      if (!config.ScopeExists(provider.ScopeName)) 
      { 
       DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(provider.ScopeName); 
       scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Customer", connection)); 
       DbSyncTableDescription serverTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Customer", connection); 
       serverTableDesc.GlobalName = "CustomerTable"; 
       config.PopulateFromScopeDescription(scopeDesc); 
       config.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting); 
       config.Apply(); 

      } 


     } 

     private static void PrepareClientForProvisioning(SqlSyncProvider provider, SqlConnection sourceConnection) 
     { 
      SqlSyncScopeProvisioning config = new SqlSyncScopeProvisioning((SqlConnection)provider.Connection); 
      if (!config.ScopeExists(provider.ScopeName)) 
      { 
       DbSyncScopeDescription scopeDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope(provider.ScopeName, sourceConnection); 
       scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Customer", sourceConnection)); 
       config.PopulateFromScopeDescription(scopeDesc); 
       config.Apply(); 

      } 

     } 


    } 
} 

답변

1

. 그게 바로 상자에서 지원됩니다. 표를 제공 할 때 포함 할 열을 지정할 수 있습니다. 모든 테이블에 대해 특정 열을 추가해야하는 코드를 지정할 수 있습니다. 위의 코드에서 모든 열을 가져 오는 GetDescriptionForTable을 사용합니다. 동일한 코드를 유지하고 제외시킬 열을 단순히 제거 할 수 있습니다. 그런 접근법은 위에서 인용 한 블로그 게시물에 있습니다.