2012-09-09 8 views
15

EF5を使用する4人の開発者からなるチームで、自分のローカルデータベースで作業しています。これまでは自動移行を使用していましたが、自動移行を無効にして明示的なコードベースの移行を追加するために、本番環境にリリースする必要がある時点に近づいています。ここでUpdate-Databaseは、自動マイグレーションを無効にしても自動的にマイグレーションを試みます。

は問題です:開発者は新しい明示的な移行を作成した後、私は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はうまく動作し、「自動マイグレーション...」について何も言及していません。また、私がマイグレーションを実行したときに作成したマイグレーションのコードは、私のチームメイトが作成したコードと同じです。 AutomaticMigrationsEnabled = false;以降、自動移行を試みる理由がわかりません。

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

答えて

20

私自身の質問に答えるのは嫌ですが、この問題が再び発生しました。私のチームの開発者は、ローカルマシン上で自動的にマイグレーションを有効にしてから、明示的な移行を作成しました。それはその.resxファイルで定義されSource性質を持っている明示的な移行を実行する前に

エンティティフレームワークは、常にでもAutomaticMigrationsEnabled = false場合、自動移行を実行します。明示的なマイグレーションは、自動マイグレーションの実行後に作成された場合にのみSourceプロパティーセットを持ちます。

自動移行を無効にするということは、モデルの変更が検出されたときにEFが自動的にスキーマをアップグレードしないことを意味しますが、明示的な移行間のギャップを埋める必要がある場合でも自動移行を実行できます。この問題を回避するには、自動移行と明示的移行を混在させないでください。

1

AutomaticMigrationEnabled = falseは、データベースを独自に更新できないようにします。

あなた自身が実行中のUpdateデータベースのため、Update-Databaseはデータベースの現在の状態をチェックし、コードを持たないモデル(dbContext)の変更も含め、データベースにないすべての移行手順を実行しますまだベースの移行はありません。

私の推測では、データ損失の原因となるモデルに変更があります。

データ損失が発生しても変更を適用するには、-forceパラメータを使用します。

0

私のチームはこれに関連した何かを経験しています。 2人のチームメンバが両方ともマイグレーションを追加し、コードをチェックインし、最新のものを入手してからupdate-databaseを実行すると、マイグレーションがスキップされてエラーが発生します。 。

アップデートデータベース(チームメンバーが新しいマイグレーションを追加した場合)を実行してから、追加マイグレーション、アップデートデータベース、チェックインを実行して、すべてをチェックして最新のものにし始めました。

3
public class Configuration : DbMigrationsConfiguration<bailencasino.com.dal.Context.BlncnoContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

ので、あなたがEFは、データの損失につながる削除SQLオブジェクトを追加できるようにしたいと仮定しAutomaticMigrationDataLossAllowed = true;を追加します。

+9

この質問は、明確に無効になっている場合でも自動移行を適用するEFについてです。自動移行を実行することは決して望ましくありません。特に、EFが自動的にデータを失わないようにしたいと思います。 –

関連する問題