0

コードファーストアプローチを使用してデータベースを作成するために、以下の手順に従いました。

  1. クラスを作成する
  2. パッケージマネージャーを起動
  3. 移行を有効にする -ContextTypeName -MyDb
  4. Model クラスに変更を加えました
  5. 「Update-Database -Verbose」を実行します
  6. データベーステーブルに変更が反映されました

次に、データベースに接続してテーブルを削除します。「Update-Database -Verbose」コマンドを実行すると、テーブルが再度作成されると予想していましたが、以下のエラー メッセージで失敗しました。

    PM> Update-Database -Force
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending code-based migrations.
Applying automatic migration: 201308221453295_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout)
   at 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(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, Boolean downgrading, Boolean auto)
   at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, XDocument sourceModel, XDocument targetModel, Boolean downgrading)
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:d07c8463-88f6-44fa-a242-fe0da2c36f31
Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.

Can anyone help?  How can I create table again using code first approach?

よろしく、ヘマント・シェラー

4

1 に答える 1

0

データベースにはすべての実行移行を保持するシステム テーブルがあるため、再実行しても何も起こりUpdate-Databaseません。プロジェクトでモデルを変更して自動移行を引き起こした場合を除き、明示的に移行を作成しておらず、Entity Framework がデータベースをモデルに一致させようとしています。

ラファエルが言ったように、それはコードファーストです。最初にコードを使用してテーブルを管理する場合は、テーブルを直接変更しないでください。__MigrationHistory本当にこれを行う場合は、システム テーブルから移行を削除して、Entity Framework が移行が実行されたと認識しないようにする必要があります。または、 を使用しUpdate-Database -Target:[migration target here]て、コマンドレットを介してデータベースをダウングレード/元に戻します。

于 2013-08-22T15:04:55.350 に答える