Database design 同步框架。复合主键,同步设置

Database design 同步框架。复合主键,同步设置,database-design,microsoft-sync-framework,Database Design,Microsoft Sync Framework,服务器: 客户: CREATE TABLE [dbo].[Patient]( [GuidClient] [uniqueidentifier] NOT NULL, [IdClient] [int] NOT NULL, PRIMARY KEY NONCLUSTERED ( [IdClient] ASC, [GuidClient] ASC ) 从客户端下载到服务器时,我将实际值设置为GuidClient列: CREATE TABLE [Patient] (

服务器:

客户:

CREATE TABLE [dbo].[Patient](
    [GuidClient] [uniqueidentifier] NOT NULL,
    [IdClient] [int] NOT NULL,
PRIMARY KEY NONCLUSTERED 
(
    [IdClient] ASC,
    [GuidClient] ASC
)
从客户端下载到服务器时,我将实际值设置为GuidClient列:

CREATE TABLE [Patient] (
    [Id] int NOT NULL IDENTITY PRIMARY KEY, 
    [GuidClient] [uniqueidentifier] -- this always null, for Sync Framework
)

问题2:此带有虚拟PK的架构无法将更改从服务器下载到客户端,对吗?

我不确定是否理解您的问题1-如果您要上载删除,则应采用相同的过程。没什么特别的。问题2-应该可以,您知道客户端的guid是什么。另外,您已经修改了客户端的表以添加guid,为什么不在表本身上设置guid,而不是在运行时截取并添加guid?1。可能是因为添加了guid,所以在客户端上,GuidClient的实际值为NULL,而在服务器上,它不是NULL。2.每个表上的每一行都将具有相同的guidclient值?看起来很奇怪。1-您拦截并注入guid,为什么它会为空?2-您的PK是一个复合键,当id和guid都使其在服务器上唯一时,拥有唯一的guid有什么用?此外,拥有每个客户机的客户机guid意味着您可以追溯到行来自哪个客户机为什么不在表本身上设置guid您是指每行的唯一guid?我想要一个guid前置客户端。这就是为什么我加了那个假专栏。问题是:删除时,我无法截取并添加正确的guid值。我建议的是每个客户端。
remote.ChangesSelected += (s, e) =>
{
    if (e.Context.DataSet.Tables.Contains(patTbl))
    {
        var dataTable = e.Context.DataSet.Tables[patTbl];
        for (int j = 0; j < dataTable.Rows.Count; j++)
        {
            DataRow row = dataTable.Rows[j];
            row["GuidClient"] = clientGuid;
        }
    }
}
row.RejectChanges();
row["GuidClient"] = clientGuid;
row.Delete();