同步框架2.1外键约束(Sync Framework 2.1 Foreign key constra

2019-10-18 12:28发布

我看到的外键约束的问题,我得到了很多的问题是,在默认情况下,下面的约束不复制到客户端:外键约束,唯一约束和DEFAULT约束

本文档中: http://msdn.microsoft.com/en-us/library/bb726037.aspx

所以,看来我要“手动”创建的关系,一旦架构在客户端上创建的。

一旦关系已在客户端上创建的,如果我做了什么在服务器端表中的任何改变,我不得不一次又一次地重新在客户端的所有关系。 是不是会很头疼。 反正是有编写代码或脚本来创建可刚复制的客户端外键约束。 如果我们做,可以在客户端通过改变脚本来完成服务器端表架构进行任何更改。

Answer 1:

我现在用的样品的修改版本http://code.msdn.microsoft.com/Database-Sync-SQL-Server-7e88adab#content的SQL Server Express在WCF服务到SQL Server。

我使用的脚本从SQL管理局生成ALTER TABLE脚本添加所有的外键http://blog.sqlauthority.com/2008/04/18/sql-server-generate-foreign-key-scripts-for-database /

当客户端调用WCF服务GetScopeDescription()来得到我运行上面的存储过程把所有的外键关系添加的客户端架构。 该SQL脚本返回我把在DbSyncScopeDescription.UserComment领域,其持有的脚本,并在同一时间架构它传输到客户端的字符串。 然后客户端同步范围/模式后,我可以运行该脚本生成的关系。

DbSyncScopeDescription dbSyncScopeDescription = sqlSyncProviderProxy.GetScopeDescription();
sqlSyncScopeProvisioning.PopulateFromScopeDescription(dbSyncScopeDescription);
sqlSyncScopeProvisioning.Apply();
string alterDatabaseScript = dbSyncScopeDescription.UserComment;

这是专门针对静态数据库架构/关系。 当需要架构/关系的修改,我会首先删除客户端数据库。



Answer 2:

同步框架犯规自动拾取到正在同步的表做架构更改。 不管它只是一个FK,列名/类型/长度的变化,你必须要重新设置(除非你想破解的同步对象的方式)。

如果你想完整的模式保真度,我建议你创建数据库对象自己(表,约束,SP,触发器,等...),而不是让自己同步创建表给你。

和顺便说一句,没有同步框架4.0



Answer 3:

我简单的方法来添加外键约束只是让外键的SQL命令的txt文件,并给“;” 每个SQL命令后,用下面的代码它完美...

private void FunAddForeignKeys()
    {
        SqlConnection clientConn = new SqlConnection(lconString);
                    if (clientConn.State == ConnectionState.Closed)
                        clientConn.Open();
                    System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(GetSql("ForeignKeyQueries.txt"), clientConn);

        try
        {
            Command.ExecuteNonQuery();
            MessageBox.Show("Foreign keys added");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            // Closing the connection should be done in a Finally block
            clientConn.Close();
        }
}
        private string GetSql(string Name)
        {
         try
        {
            // Gets the current assembly.
            Assembly Asm = Assembly.GetExecutingAssembly();

            // Resources are named using a fully qualified name.
            Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);

            // Reads the contents of the embedded file.
            StreamReader reader = new StreamReader(strm);
            return reader.ReadToEnd();

        }
        catch (Exception ex)
        {
            MessageBox.Show("In GetSQL: " + ex.Message);
            throw ex;
        }
}


Answer 4:

我已经得到了通过同步创建客户端表,然后添加代码来生成外键约束的解决方案。 其简单的方法,而不是生成所有表自己,然后添加约束他们。 只是复制线关系,仅此而已。



文章来源: Sync Framework 2.1 Foreign key constraints