2016-12-26 5 views
3

私はテストおよびライブDBを持っています。テスト用データベースの移行では、パッケージマネージャコンソールでAdd-Migration ...Update-Databaseの構文を使用します。しかしライブDBの場合、私はアプリが起動されたときにプログラムでそれをやりたいエンティティフレームワークのコアは、プログラムによる移行を適用します。

次のコードは、私を助けていない:私は存在しないテーブルにレコードを追加しようとしたとき、私はエラーInvalid object name 'TempTenants'を持って

context.Database.Migrate(); 

。これは私の新しいテーブルです。

しかし、私は_EFMigrationsHistoryテーブルを持っています。そして、マイグレーションはすべて適用されていないマイグレーションもあります。しかし、私は新しいテーブルを見ません。

テストDBからテーブルを手動で削除してエラーを再現すると同じ結果が得られます。

だから、context.Database.Migrate();は存在しない場合はすべての移行で新しいdbを作成しますが、既存のdbを更新(移行を適用)しません。

できますか?それをどうすれば解決できますか?

+0

「それは私を助けませんでした」と明確にしてください。どうして?何が起こった?エラーメッセージ?また、あなたのdbはもともとマイグレーションによって作成されました( '__EFMigrationsHistory'テーブルがあります)? – Tseng

+0

@Tseng質問を更新しました。どうぞご覧ください。 –

+0

開始時に例外はありませんか?ログには何が表示されますか?ユーザーはデータベースサーバーに対して十分な書き込み権限を持っていますか? (ALTER/CREATEステートメント) – Tseng

答えて

1

何かが間違っているようです。 __EFMigrationsHistoryテーブルから未適用の移行(レコード)を削除しました(また、テーブル名、主キーと外部キーを元の状態に戻す必要がありました)。

したがって、context.Database.Migrate();は既存のデータベースでも移行を適用します。

関連する問題