我正在使用一个非常有趣的包在 SQL Server 之间同步。
由于它很简单,“仅下载”,因此表现良好且快速。
现在我需要创建一个过滤器 - 类似于
FROM Table_Name
WHERE tenantID = @myVariable
我正在关注此处的文档: https://dotmimsync.readthedocs.io/Filters.html
显然逻辑简单且完美,但我无法运行过滤器,它同步但不过滤
我有几个表,我想创建一个过滤器,其中
tenantID
列 (FK) 等于我的 GUID 变量值。
例如:
var setup = new SyncSetup("dbo.Tennants", "dbo.Devices", "dbo.Audios", et cetera...)
setup.Tables["dbo.Tennants"].SyncDirection = SyncDirection.DownloadOnly;
setup.Tables["dbo.Devices"].SyncDirection = SyncDirection.DownloadOnly;
setup.Tables["dbo.Audios"].SyncDirection = SyncDirection.DownloadOnly;
过滤器从这里开始:
var filterTenants = new SetupFilter("Tenants");
filterTenants.AddParameter("TenantId", DbType.Guid);
filterTenants.AddWhere("TenantId", "Tenants", "TenantId");
setup.Filters.Add(filterTenants);
var filterDevices = new SetupFilter("Devices");
filterDevices.AddParameter("TenantId", DbType.Guid);
filterDevices.AddWhere("TenantId", "Devices", "TenantId");
setup.Filters.Add(filterDevices);
var filterAudios = new SetupFilter("Audios");
filterAudios.AddParameter("TenantId", DbType.Guid);
filterAudios.AddWhere("TenantId", "Audios", "TenantId");
setup.Filters.Add(filterAudios);
我已经尝试将 DbType.Guid 类型作为 TableName ("TenantId", "Audios");
发送这里我为我的 C# 变量
TenantID
定义了创建的参数
_myTenantId
var parameters = new SyncParameters
{
{ "TenantId", _myTenantId }
};
最后我执行:
var result = await agent.SynchronizeAsync(setup, parameters, progress);
当然代码要大得多,错误处理等等,但我不相信这会影响它。
它同步所有
TenantID
,而不是我的变量 _myTenantId
中的那个。
我做了一个工作示例来测试这个问题
Master
和 Local
)tenantId
通过随机数据创建种子我发现您无法将架构名称与它一起发送。尽管文档中有说明。
而不是:
setup.Tables["dbo.Tennants"].SyncDirection = SyncDirection.DownloadOnly;
正确的是:
setup.Tables["Tennants"].SyncDirection = SyncDirection.DownloadOnly;
微妙,但是错误没有显示这一点,我通过作者自己的回答发现了它。