1

nocheck 制約を使用してコード ファーストの移行でテーブルを変更することは可能ですか? Update-Database -ScriptSQLスクリプトを取得してSQLステートメントを変更する以外に、これを行う方法が見つかりませんでした。

4

3 に答える 3

6

独自の作成を試みMigrationSqlGeneratorて、移行で使用できます (カスタム SQL ジェネレーターを に設定できます)。外部キー = オーバーライドを追加した後、継承して追加するDbMigrationsConfigurationだけで十分だと思います。SqlServerMigrationSqlGeneratorNOCHECKGenerate(AddForeignKeyIperation operation)

とにかくNOCHECKEFで使用することは災害への道です。チェック制約のないデータベースが必要な場合は、矛盾に達するたびにクラッシュするため、EF を使用しないでください。

于 2012-09-25T08:35:43.870 に答える
3

必要な外部キーを作成することが目標であるが、既存のデータが原因で update-database が失敗する場合は、2 段階で実行してください。たとえば、すべてのプレーヤーをチームに割り当てる必要がある 1:m の関係のために、PLAYER クラスに TEAM の外部キーを追加するとします。すべてのクラスが整数の ID プライマリ キーを持っていると仮定すると... 1. 通常の 2 つのプロパティを PLAYER に追加しますが、外部キーには null 許容の int を使用します。すなわち:

    public int? TeamID { get; set; }

    public virtual Team Team { get; set; }
  1. 移行を追加し、データベースを更新します。すべての TeamID 値は null になりますが、関係を作成することは許可されます。

    1. 次に、すべてのプレイヤーに有効な TeamID が割り当てられるようにデータを修正します。プレイヤー データをシードしている場合は、そこにも TeamID 値を指定する必要があります。
    2. PLAYER クラスを変更して、int が null 可能にならないようにします。

      public int TeamID { get; 設定; }

    3. 別の移行を追加して、データベースを再度更新します。準備万端です。

于 2016-10-31T16:56:07.227 に答える