1

外部キー制約の問題に関する多くの質問を見てきましたが、デフォルトでは、次の制約はクライアントにコピーされません: FOREIGN KEY 制約、UNIQUE 制約、および DEFAULT 制約

このドキュメント: http://msdn.microsoft.com/en-us/library/bb726037.aspx

そのため、クライアントでスキーマが作成されたら、関係を「手動で」作成する必要があるようです。

クライアント側で関係が作成されたら、サーバー側のテーブルに変更を加えると、クライアント側ですべての関係を何度も再作成する必要があります。頭がおかしくなるじゃないですか。コピーするだけでクライアント側に外部キー制約を作成するコードまたはスクリプトを作成する方法はありますか。また、スクリプトを変更することでクライアント側で実行できるサーバー側のテーブルスキーマに変更を加える場合。

4

4 に答える 4

4

サンプルhttp://code.msdn.microsoft.com/Database-Sync-SQL-Server-7e88adab#content Sql Server Express to Sql Server over WCF Serviceの修正版を使用しています。

SQL Authority のスクリプトを使用して 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;

これは、静的データベース スキーマ/関係に固有のものです。スキーマ/関係の変更が必要な場合は、最初にクライアント データベースを削除します。

于 2013-12-17T19:11:21.307 に答える
0

同期を介してクライアント側のテーブルを作成し、外部キー制約を生成するコードを追加するソリューションがあります。すべてのテーブルを自分で生成してから制約を追加するのではなく、簡単な方法です。リレーションの行をコピーするだけです。

于 2013-08-16T11:43:00.237 に答える