私のMVC Webアプリで、既存のモデルにCompetenciesと呼ばれるモデルを追加し、add-migration
とupdate-database
を実行しましたが、正常に機能しました。そのモデルをベースにしたコントローラーであれば、問題はありませんでした。
しかしその後、何かがおかしいことに気付いたので、コントローラーとそのモデルのビューを削除しました。また、サーバーエクスプローラーからテーブルを削除し、CompetencyLabelという新しいモデルを作成してadd-migration
を実行しましたが、正常に機能しますが、update-database
を実行すると、 PM>ウィンドウでのこのエラー:
「オブジェクト「dbo.Competencies」が存在しないか、権限がないため、見つかりません。」
そのテーブルは削除されましたが、なぜそれを求められるのかわかりません。誰かがそれを機能させる方法を知っていますか?どうもありがとう。
_Enable-Migrations
_コマンドを入力すると、Migrations
フォルダーがプロジェクトに作成されます。 _Add-Migration
_を実行すると、そのフォルダーに新しい移行ファイルが作成されます。ファイルでは、2つのメソッドが定義されています。
Up()
-_Update-Database
_を使用してデータベースをアップグレードするときに実行するアクションを定義しますDown()
-_Update-Database
_を使用してデータベースをダウングレードするときに実行するアクションを定義しますコンピテンシーモデルを削除すると、最新の移行によってUp()
メソッドにコードが追加され、コンピテンシーテーブルのインデックスが破棄されてテーブルが削除されます。手動で行ったので、それを担当するコードと_Update-Database
_を削除します。問題なくアップグレードするはずです。
この問題に対する別の答えを見つけました。
私のシナリオでは、エンティティ(変更関係とエンティティ名)を変更しました。私が実行したとき、update-database -verbose
「EntityHistory」でいくつかの関数を実行していることがわかりましたが、名前を「AnotherEntityHistory」に変更したため、そのエンティティはもう存在していません。次に、「オブジェクト "dbo.EntityHistory"が存在しないか、権限がないため、オブジェクトが見つかりません」という結果になります。
私が行ったのは、AnotherEntityHistoryの名前を再度EntityHistoryに変更し、Update-databaseを実行して(「EntityHistoryが不足している」ため、すべてOKになります)、EntityHistoryの名前をAnotherEntityHistoryに再度変更して、update-databaseを再度実行しました。
テーブルの名前を変更したり、インデックスを削除したりする代わりに、テーブルの名前を変更するだけでよいことがわかります。
この方法では、テーブルや移行値を削除する必要はありません。
プロジェクトの移行をやり直しても、EFはスキーマの変更を記憶します。
プロジェクトの初期に同様の問題があり、データベースから_MigrationHistoryテーブルを削除して修正し、移行を再生成しました。
Add-Migration
を適用した後、Update-Database
を実行する前にデータベースの内容を手動で削除または変更したため(ここでエラーが生成されると思います)
Update-Database –TargetMigration: OldMigration
を使用して以前の移行を元に戻すか、生成されたデータベースを削除するか、データベーステーブルから古い移行レコードをクリアする必要がありますAdd-Migration
を最初に移行するAdd-Migration
コマンドからデータベースの更新を実行するこれで問題が解決します。
migrationsフォルダーに手動で追加したすべての移行クラスを削除します(add-migrationコマンドによって)このコマンドを入力します_add-migration MigrationName -ProjectName YourProjectName
_
すべてがうまくいく場合は、新しく作成された移行クラスのUpメソッドに次のコードが表示されます。
DropTable("dbo.Competencies"); CreateTable("dbo.CompetencyLabel");
次に、このコマンドを実行します_update-database -verbose -ProjectName YourProjectName
_
幸せなコーディング
同様の問題がありました。この問題は、ユーザーがデータベースにテーブルを作成できない場合に発生します。これを解決するには、データベースにテーブルを作成するアクセス権をユーザーに付与する必要があります。
あなたは付け加えられます db_ddladmin
またはdb_owner
データベースデータベースユーザーのロールメンバーシップ。
まず、このエラーについて理由を教えてください:
移行を手動で削除し、その後それで十分だと考えますが、新しい移行では、その効果を作成することが存在します。
ソリューション:
すべての移行を1つずつ開き、dbo-xxxx
を示す部分を削除します
それだけ:)
私の問題は、 @ EduLopezの回答 で説明されている問題に似ていました。
そして私のコードはそのようなものでした:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameTable(
name: "oldTableName",
schema: "oldSchemaName",
newName: "newTableName"
);
}
解決策:@ EduLopezが提案したように 、私はupdate-database -verbose
そして、新しいスキーマ名を指定する必要があることを発見しました:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameTable(
name: "oldTableName",
schema: "oldSchemaName",
newName: "newTableName",
newSchema: "newSchemaName" // added this line
);
}