0

ASP.NETコアCode FirstアプリでエンティティFramework Core 1.1 with Migrationsを使用してFK制約を作成すると、EFを使用せずにSQL Serverで制約を一時的に有効または無効にすることはできますかEFなどを介して作成された移行を破る? 背景:EFコードファーストで作成されたFKを介して複数のテーブルによって参照されているテーブルからデータを切り捨てる必要があります。 SQL Serverは、FKなどが参照しているため、テーブルを切り捨てることができると不平を言います。EFコードの最初の移行と外部キー制約

+0

また、移行スクリプトにSQLスクリプトを追加することもできます。このようにすれば、より柔軟に対応できます。 – Ignas

+0

@lgnasどうすればいいですか? – nam

+0

例:https://stackoverflow.com/questions/26535189/entity-framework-execute-sql-before-migrations – Ignas

答えて

0

SQL Serverのデータベーススキーマでコードを変更しても、移行は中断されます。実行する操作のコード内の外部キー参照を削除し、後で再作成する必要があります。ただし、データが不整合な状態のまま残っていると、データを失うことなく制約を再作成できない場合があります。

+0

私はスキーマを変更していません。つまり、一時的に無効にするだけの制約を取り除くことはできません。 – nam

+0

それでも、コマンド "ALTER TABLE TableName NOCHECK CONSTRAINT ConstraintName"を内部的に使用するため、移行が中断されます。 –

+0

私はそれらを「一時的に」無効にしているので、 – nam

0

いいえ、移行を中断しません。データベース上で何かをして、データベースのスキーマ設計を元の状態に戻すと、マイグレーションは正常に実行されます。適用された移行は、データベース内のEF管理対象オブジェクトの形状が同じであることを前提としています(前述のとおり)。すべての一時的な変更は移行には見えません。将来の移行が適用されるときに適切なオブジェクトが存在する場合はDDLによって障害が発生する可能性があるため、後で同じ状態にする必要があります。