19

私はEF5を使用する4人の開発者のチームで作業しており、全員が独自のローカルデータベースで作業しています。これまで自動移行を使用してきましたが、本番環境にリリースする必要がある段階に近づいているため、自動移行を無効にし、明示的なコードベースの移行を追加し始めました。

問題Update-Databaseは次のとおりです。開発者が新しい明示的な移行を作成した後にコマンドを実行すると、次のエラーが発生します。

Applying code-based migrations: [201209080142319_CreatedDate.LastModifiedDate.Additions].
Applying code-based migration: 201209080142319_CreatedDate.LastModifiedDate.Additions.
Applying automatic migration:    201209080142319_CreatedDate.LastModifiedDate.Additions_AutomaticMigration.
Automatic migration was not applied because it would result in data loss.

自動移行を無効にしているのに、なぜこのエラーが発生するのですか?明示的な移行を削除してから再スキャフォールディング(実行Add-Migration)することで、このエラーを修正できます。その後Update-Database、正常に実行され、「自動移行...」については何も言及されていません。また、Add-Migrationを実行したときに私が作成した移行のコードは、チームメートが作成したコードと同じです。以来、なぜ自動移行を行おうとするのかわかりませんAutomaticMigrationsEnabled = false;

ここで何が欠けていますか?

4

5 に答える 5

32

私は自分の質問に答えるのが嫌いですが、この問題に再び遭遇しました。私のチームの開発者は、ローカルマシンで自動移行を再度有効にしてから、明示的な移行を作成しました。これにより、実行するとすぐにこの動作が再現されました。

エンティティフレームワークは、ファイルにプロパティが定義されいる明示的な移行を実行する前に、常に自動移行を実行します。明示的な移行では、自動移行の実行後に作成された場合にのみプロパティが設定されます。Source.resx AutomaticMigrationsEnabled = falseSource

結果として、自動移行を無効にすると、EFはモデルの変更を検出したときにスキーマを自動的にアップグレードしませんが、明示的な移行間のギャップを埋める必要がある場合は、自動移行を実行する可能性があります。この動作を回避するには、自動移行と明示的な移行を組み合わせて使用​​しないでください。

于 2013-06-05T16:57:34.547 に答える
2
public class Configuration : DbMigrationsConfiguration<bailencasino.com.dal.Context.BlncnoContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = true;
    }

追加AutomaticMigrationDataLossAllowed = true;して、EFがデータ損失をもたらすSQLオブジェクトを追加削除できるようにすることを想定します。

于 2013-04-23T23:33:48.107 に答える
0

AutomaticMigrationEnabled = falseアプリケーションがデータベースを独自に更新するのを防ぎます。

ただし、Update-databaseを自分で実行しているため、Update-Databaseはデータベースの現在の状態を確認し、コードベースの移行がまだ行われていないモデル(dbContext)の変更を含め、データベースにまだ存在しないすべての移行手順を実行します。 。

私の推測では、データの損失を引き起こすモデルの変更があります。

この-forceパラメーターを使用して、データが失われた場合でも変更を適用できます。

于 2012-09-10T00:59:01.427 に答える
0

私のチームはこれに関連しているかもしれない何かを経験しました。2人のチームメンバーが両方とも移行を追加し、コードをチェックインして最新のデータベースを取得し、データベースの更新を実行すると、移行が「スキップ」されたため、2番目のメンバーはエラーになります。システムはチームメンバーの移行が実装されていないことを認識します。 。

すべてのチェックインと最新情報の取得を開始し、データベースの更新(チームメンバーが新しい移行を追加した場合)を実行してから、データベースの追加、データベースの更新、チェックインを実行します。

于 2012-09-10T21:00:26.380 に答える
0

@デイブグレイブスは正しいです。私は同じ問題を抱えていて、特定の移行ファイルの自動移行を無効にするために彼の修正を行いました

ここにいくつかの指示があります:

  1. ソリューションエクスプローラーで移行ファイルが配置されている場所に移動します(Visual Studioを使用している場合)
  2. その自動移行の原因となる移行ファイルを探します。例:202008181102535_BlogPost.cs
  3. 展開すると、デザイナーファイルが表示されます。そのファイルを開く
  4. そのファイル内で、そのSourceプロパティがのようなものによって設定されていることがわかりますResources.GetString("Source")。これをに置き換えてから、パッケージマネージャーコンソールnullで手動で実行してみてください。update-database
于 2020-10-22T04:43:26.237 に答える