nocheck 制約を使用してコード ファーストの移行でテーブルを変更することは可能ですか? Update-Database -Script
SQLスクリプトを取得してSQLステートメントを変更する以外に、これを行う方法が見つかりませんでした。
3 に答える
独自の作成を試みMigrationSqlGenerator
て、移行で使用できます (カスタム SQL ジェネレーターを に設定できます)。外部キー = オーバーライドを追加した後、継承して追加するDbMigrationsConfiguration
だけで十分だと思います。SqlServerMigrationSqlGenerator
NOCHECK
Generate(AddForeignKeyIperation operation)
とにかくNOCHECK
EFで使用することは災害への道です。チェック制約のないデータベースが必要な場合は、矛盾に達するたびにクラッシュするため、EF を使用しないでください。
必要な外部キーを作成することが目標であるが、既存のデータが原因で update-database が失敗する場合は、2 段階で実行してください。たとえば、すべてのプレーヤーをチームに割り当てる必要がある 1:m の関係のために、PLAYER クラスに TEAM の外部キーを追加するとします。すべてのクラスが整数の ID プライマリ キーを持っていると仮定すると... 1. 通常の 2 つのプロパティを PLAYER に追加しますが、外部キーには null 許容の int を使用します。すなわち:
public int? TeamID { get; set; }
public virtual Team Team { get; set; }
移行を追加し、データベースを更新します。すべての TeamID 値は null になりますが、関係を作成することは許可されます。
- 次に、すべてのプレイヤーに有効な TeamID が割り当てられるようにデータを修正します。プレイヤー データをシードしている場合は、そこにも TeamID 値を指定する必要があります。
PLAYER クラスを変更して、int が null 可能にならないようにします。
public int TeamID { get; 設定; }
別の移行を追加して、データベースを再度更新します。準備万端です。