2014-01-08 91 views
8

mvc Webアプリケーションでは、既存のモデルにCompetenciesというモデルを1つ追加し、 update-database、正常に動作し、そのモデルに基づいてコントローラを作成しました。これは正常です。"オブジェクトが存在しないか、権限がありませんので、" dbo.xxxx "というオブジェクトは見つかりませんでした。"、

その後、私は間違ったことを認識しました。コントローラとそのビューをモデルで削除しました。テーブルをServer Explolerから取得し、CompetencyLabelという新しいモデルを作成してadd-migrationを実行するとうまくいきますが、update-databaseを実行すると、PM>ウィンドウでこのエラーが発生します。 「それは存在しないか、権限がありませんので。 『dbo.Competencies』オブジェクトが見つかりません」、

をテーブルが削除されたことが、それはまだ私にそれを尋ねる、なぜ、私は知らない

、ん誰もそれを働かせる方法を知っていますか?

+0

"run update-database"とは、edmxをアップデートするときのことですか? – Goose

+0

これはasp.net MVC Webアプリケーションです。最初はEFコードを使用していますので、毎回モデルが変更されると、パッケージ管理コンソール(PM)でそのコードを実行する必要があります。ご質問があればお知らせください。 – user2949042

+0

SQLでダミーのコンピテンシブテーブルを作成し、update-databaseを実行して、PMCにテーブルを削除する機会を与えます。また、update-databaseコマンドに-verboseを追加して、コンピテンシーテーブルに何をしようとしているのかを確認してください。 – Sparky

答えて

10

Enable-Migrationsコマンドを入力すると、Migrationsフォルダがプロジェクトに作成されます。 Add-Migrationがあれば、そのフォルダに新しい移行ファイルが作成されます。ファイルには、定義された2つの方法があります。

  • Up()は - 私たちはUpdate-Database
  • を使用してデータベースをダウングレードした場合に実行するアクションを定義します - 私たちは Update-Database
  • Down()を使用してデータベースをアップグレードする際に、実行するアクションを定義します

コンピテンシーモデルを削除したので、最新の移行により、Up()メソッドにコードが追加され、コンピテンシーテーブルのインデックスが破棄され、テーブルが削除されます。手動で行っているので、それを担当するコードとUpdate-Databaseを削除してください。問題なくアップグレードする必要があります。

+0

ありがとう#krzychu。 –

2

この問題の別の回答が見つかりました。

私のシナリオは、私のエンティティ(リレーションシップとエンティティ名の変更)を変更したことです。私はupdate-database -verboseを実行したときに、 "EntityHistory"でいくつかの関数を実行していたが、そのエンティティがもう存在しなかったことがわかった。なぜなら、その名前を "AnotherEntityHistory"に変更したからだ。その結果、私は ""が存在しないか、アクセス権がないので、オブジェクト "dbo.EntityHistory"を見つけることができません。 "と表示されます。

もう一度EntityHistoryの名前をEntityHistoryに変更し、Update-Databaseを実行しました(エンティティのEntityHistoryが「不足しているため」)、EntityHistoryの名前をAnotherEntityHistoryに再度変更してupdate-databaseを再度実行します。

あなたは今、それだけなど、テーブルの名前を変更する代わりに、テーブルの名前を変更、インデックスを削除する必要があることを確認できます....

あなたはいけない。このように任意のテーブルまたは移行値を削除する必要があります。

2

削除してきたように/(私はエラーがここに生成される推測)手動Add-Migrationを適用した後とUpdate-Databaseを行う前に、データベースの内容を変更し

  • そのが正しく適用されないよう、移行フォルダから該当する移行ファイルを削除します。 Update-Database –TargetMigration: OldMigrationを使用して以前の移行を元に戻すか、生成されたデータベースを削除するか、データベーステーブルから古い移行レコードを消去する必要があります。
  • 移行を適用します。Add-Migration NPMコードの最初の移行
  • これはあなたの問題を解決し

Add-Migrationコマンドから、データベースの更新を実行します。

1

すべてのものが正常に動作している場合、あなたが新たに作成されたマイグレーションクラスのアップメソッドで次のコードが表示されます。このコマンドにadd-migration MigrationName -ProjectName YourProjectName

を入力します(アドオン移行コマンドによって)あなたがマイグレーションのフォルダに手動で追加したすべてのマイグレーションクラスを削除します

DropTable("dbo.Competencies"); CreateTable("dbo.CompetencyLabel");

その後、

コーディング update-database -verbose -ProjectName YourProjectName

幸せこのコマンドを実行します

3

このエラーが発生した場合は、Up()ステートメントを順番に並べてください。例えば、 Before Rearrangement

あなたは上記の画像を見て、あなたは、Usersテーブルを最初にし、次の行に名前が変更されたことを認識し、SQL文がUsersテーブルの外部キーをドロップするように生成されますが、 Entity Frameworkに、テーブル(つまりUsersテーブル)が存在しないため、エラーが発生します。

Usersテーブルの名前が変更されたときに再度呼び出されないように、ステートメントを並べ替えます。下の画像に例があります。 After Rearrangement

+0

魅力のように動作します、ありがとう! –

+0

あなたは大歓迎です。 :-) –

関連する問題