SQL 更改跟踪和 Microsoft 同步框架
SQL Change Tracking and Microsoft Sync Framework
我对数据库和 SQL 有点陌生,我正在努力理解 SQL Change Tracking
和 Microsoft Sync Framework
如何协同工作。
我找不到一些关于如何与 Microsoft Sync Framework
同步数据库的清晰示例,但希望我找到了 this 站点,修改了代码并在我的两个数据库上同步工作,这是我得到的代码:
// Server connection
using (SqlConnection serverConn = new SqlConnection(serverConnectionString))
{
if (serverConn.State == ConnectionState.Closed)
serverConn.Open();
// Client connection
using (SqlConnection clientConn = new SqlConnection(clientConnectionString))
{
if (clientConn.State == ConnectionState.Closed)
clientConn.Open();
const string scopeName = "DifferentPKScope";
// Provision Server
var serverProvision = new SqlSyncScopeProvisioning(serverConn);
if (!serverProvision.ScopeExists(scopeName))
{
var serverScopeDesc = new DbSyncScopeDescription(scopeName);
var serverTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, serverConn);
// Add the table to the descriptor
serverScopeDesc.Tables.Add(serverTableDesc);
serverProvision.PopulateFromScopeDescription(serverScopeDesc);
serverProvision.Apply();
}
// Provision Client
var clientProvision = new SqlSyncScopeProvisioning(clientConn);
if (!clientProvision.ScopeExists(scopeName))
{
var clientScopeDesc = new DbSyncScopeDescription(scopeName);
var clientTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, clientConn);
// Add the table to the descriptor
clientScopeDesc.Tables.Add(clientTableDesc);
clientProvision.PopulateFromScopeDescription(clientScopeDesc);
clientProvision.SetCreateTrackingTableDefault(DbSyncCreationOption.CreateOrUseExisting);
clientProvision.Apply();
}
// Create the sync orchestrator
var syncOrchestrator = new SyncOrchestrator();
// Setup providers
var localProvider = new SqlSyncProvider(scopeName, clientConn);
var remoteProvider = new SqlSyncProvider(scopeName, serverConn);
syncOrchestrator.LocalProvider = localProvider;
syncOrchestrator.RemoteProvider = remoteProvider;
// Set the direction of sync session
syncOrchestrator.Direction = direction;
// Execute the synchronization process
return syncOrchestrator.Synchronize();
}
}
因此,通过这种方式,任何更改都会在我的两个数据库之间同步。但是我想要一种方法让我的 C# 应用程序在发生变化时自动同步两个数据库,所以我找到了一个叫做 Change Tracking
here 的东西。我下载了提供 SynchronizationHelper
的示例代码,它还在我名为 "{TableName}_tracking"
的数据库中创建了 table。这是另一个跟踪更改的 table,事实上,每当我更改数据库中的某些内容时,_tracking
都会使用我更改、添加或删除的元素进行更新。 Change Tracking
不会自动同步我的数据库,它只是跟踪其中的更改,这样做的目的是什么?
对于第一个代码,同步有效但没有创建 _tracking
table,它是否只是同步 table 中的所有内容,无论发生什么变化?如果是这样,对于大型数据库我应该使用 Change Tracking
?
也许这是微不足道的事情,但我一直在谷歌搜索和测试大量代码,但找不到明确的答案。
当您安装 Sync Framework 时,它会附带一个帮助文件,其中包含多个同步数据库的演练。您提到的第一个 link 和第二个使用相同的同步提供程序,并且它们都有跟踪表。 Sync Framework 支持使用内置的 SQL 更改跟踪功能或使用 Sync Framework 自己创建的自定义功能(_tracking)。
Sync Framework 位于您的数据库之外,您需要调用它才能触发同步。 Change Tracking 就是它所说的 - 跟踪更改。
如果您希望数据库进行同步,您可能需要检查 SQL 复制。
我对数据库和 SQL 有点陌生,我正在努力理解 SQL Change Tracking
和 Microsoft Sync Framework
如何协同工作。
我找不到一些关于如何与 Microsoft Sync Framework
同步数据库的清晰示例,但希望我找到了 this 站点,修改了代码并在我的两个数据库上同步工作,这是我得到的代码:
// Server connection
using (SqlConnection serverConn = new SqlConnection(serverConnectionString))
{
if (serverConn.State == ConnectionState.Closed)
serverConn.Open();
// Client connection
using (SqlConnection clientConn = new SqlConnection(clientConnectionString))
{
if (clientConn.State == ConnectionState.Closed)
clientConn.Open();
const string scopeName = "DifferentPKScope";
// Provision Server
var serverProvision = new SqlSyncScopeProvisioning(serverConn);
if (!serverProvision.ScopeExists(scopeName))
{
var serverScopeDesc = new DbSyncScopeDescription(scopeName);
var serverTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, serverConn);
// Add the table to the descriptor
serverScopeDesc.Tables.Add(serverTableDesc);
serverProvision.PopulateFromScopeDescription(serverScopeDesc);
serverProvision.Apply();
}
// Provision Client
var clientProvision = new SqlSyncScopeProvisioning(clientConn);
if (!clientProvision.ScopeExists(scopeName))
{
var clientScopeDesc = new DbSyncScopeDescription(scopeName);
var clientTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, clientConn);
// Add the table to the descriptor
clientScopeDesc.Tables.Add(clientTableDesc);
clientProvision.PopulateFromScopeDescription(clientScopeDesc);
clientProvision.SetCreateTrackingTableDefault(DbSyncCreationOption.CreateOrUseExisting);
clientProvision.Apply();
}
// Create the sync orchestrator
var syncOrchestrator = new SyncOrchestrator();
// Setup providers
var localProvider = new SqlSyncProvider(scopeName, clientConn);
var remoteProvider = new SqlSyncProvider(scopeName, serverConn);
syncOrchestrator.LocalProvider = localProvider;
syncOrchestrator.RemoteProvider = remoteProvider;
// Set the direction of sync session
syncOrchestrator.Direction = direction;
// Execute the synchronization process
return syncOrchestrator.Synchronize();
}
}
因此,通过这种方式,任何更改都会在我的两个数据库之间同步。但是我想要一种方法让我的 C# 应用程序在发生变化时自动同步两个数据库,所以我找到了一个叫做 Change Tracking
here 的东西。我下载了提供 SynchronizationHelper
的示例代码,它还在我名为 "{TableName}_tracking"
的数据库中创建了 table。这是另一个跟踪更改的 table,事实上,每当我更改数据库中的某些内容时,_tracking
都会使用我更改、添加或删除的元素进行更新。 Change Tracking
不会自动同步我的数据库,它只是跟踪其中的更改,这样做的目的是什么?
对于第一个代码,同步有效但没有创建 _tracking
table,它是否只是同步 table 中的所有内容,无论发生什么变化?如果是这样,对于大型数据库我应该使用 Change Tracking
?
也许这是微不足道的事情,但我一直在谷歌搜索和测试大量代码,但找不到明确的答案。
当您安装 Sync Framework 时,它会附带一个帮助文件,其中包含多个同步数据库的演练。您提到的第一个 link 和第二个使用相同的同步提供程序,并且它们都有跟踪表。 Sync Framework 支持使用内置的 SQL 更改跟踪功能或使用 Sync Framework 自己创建的自定义功能(_tracking)。
Sync Framework 位于您的数据库之外,您需要调用它才能触发同步。 Change Tracking 就是它所说的 - 跟踪更改。
如果您希望数据库进行同步,您可能需要检查 SQL 复制。