1

私は、いくつかのシード データを提供する EF コードで最初に生成されたデータベースを使用しており、他のデータベースからデータをインポートしています (1 万行あるため、EF でシードするのは意味がありません)。プロセスを合理化するために、データベース全体のデータのみをスクリプト化できると考えました。したがって、DropCreate (現在は移行戦略を使用) が必要になった場合は、データベースを再度作成して、すべてのデータを一度にシードできます。

ただし、SQL Server によって生成されたスクリプトは、次のような多数の競合を引き起こします。

INSERT ステートメントが FOREIGN KEY 制約と競合しました...

これは、データが非常に複雑であり、データを間違った順序で挿入すると、これが発生する可能性があるためだと想像できます。テーブルにデータを入力する前にデータベースのすべての外部キー制約を無視/オフにする.sqlスクリプトを取得し、挿入が完了した後にそれらをオンに戻す方法はありますか? すべてのデータが挿入されると、制約の問題は発生しません。

4

1 に答える 1

1

はい、一時的に外部キーを無効にすることができます:

ALTER TABLE MyTable NOCHECK CONSTRAINT FK_MyTable_MyKey

制約を再度有効にするときは、制約をチェックして、違反がないことを確認する必要があります (二重チェック チェックに注意してください)。

ALTER TABLE [MyTable] WITH CHECK CHECK CONSTRAINT FK_MyTable_MyKey

データベース レベルのソリューションについては、この投稿を参照してください。

于 2012-08-14T15:31:18.010 に答える