16

Code First を使用してテーブルを作成しています。

クラス、マッピング ファイルを作成し、nuget で add-migration コマンドを発行してから、update-database コマンドを発行しました。

その後、クラスを変更し、馬鹿のようにテーブルを削除しました。

移行クラス ファイルを削除しました

add-migration コマンドを発行しました

update-database コマンドを発行すると、次のエラーが表示されます。

System.Data.SqlClient.SqlException (0x80131904): オブジェクト "dbo.CorrectiveActionPlan" が存在しないか、アクセス許可がないため、見つかりません。System.Data.SqlClient.SqlConnection.OnError で (SqlException 例外、ブール値の breakConnection、アクション1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) で System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& DataReady) で System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds (String methodName, Boolean async, Int32 timeout) で System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (TaskCompletionSource 1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements) で System.Data.Entity.Migrations.Infrastructure.MigratorBase. ExecuteStatements(IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerableSystem.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable 1 pendingMigrations、文字列 targetMigrationId、文字列 lastMigrationId)1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable

System.Data.Entity.Migrations.DbMigrator.Update (文字列 targetMigration) で System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update (文字列 targetMigration) で System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore () System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() ClientConnectionId:a6e92a35-cc9e-4867-97a5-0a274081d853 でオブジェクト "dbo.CorrectiveActionPlan" が存在しないか、持っていないため見つかりませんパーミッション。

EF にテーブルを再作成させるにはどうすればよいですか?

4

3 に答える 3

33

私は自分の答えを見つけました。

移行に対応する [dbo].[__MigrationHistory] ​​の行を削除しました

次に、新しい移行ファイルを削除しました

add-migration を再実行しました

そして update-database -verbose を再実行しました

于 2012-11-15T07:05:01.863 に答える
0

コード ファーストの移行のためにいくつかのオプションを用意しており、テーブルやレコードを削除する必要がある理由によって異なります。これが私の方法です:

  • モデルを変更し、マッピングによってエラーが発生してテーブルを更新できない場合は、SQL Management Server Studio を使用してデータベース全体を削除し、Migration フォルダーを削除します。スクリプトを保存して再入力することをお勧めします。 SQL スクリプトを使用してテスト データを更新するか、Configuration.cs ファイルを保存します。データベースの更新コマンドを実行すると、データが再入力されます。

    テーブル データを削除するだけのストアド プロシージャのスクリプトの例を次に示します。

    USE [DatabaseName]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE [dbo].[sp_DeleteAllYardPenaltyRecords]
    AS
    EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
    EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
    EXEC sp_MSForEachTable 'DELETE FROM ?'
    EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
    EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
    EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
    
  • データをドロップしたいだけの場合は、パッケージ マネージャー コンソール コマンドを使用できます: PM> Update-Database -TargetMigration $InitialDatabase& 作成された移行ファイルを削除します。つまり、'201502210525393_example_with_error.cs' を実行し、'Add-Migration new_example.cs' を再度実行します。これにより、データベースが最初のスナップショットに戻ります

  • または、あなたの方法を使用することもできます: [dbo].[__MigrationHistory]& 移行ファイルの行を削除してください: '201502210525393_example_with_error.cs' その後、再実行add-migrationしてupdate-database

于 2015-06-26T02:48:24.967 に答える