Recréer une table avec Entity Framework 5 et nuget
Je suis en utilisant le Premier Code pour créer une table.
J'ai créé la classe, le fichier de mappage et a émis le complément de commande de migration dans nuget et donc la mise à jour de la base de données de commande
J'ai ensuite changé la classe et comme un idiot supprimé la table.
J'ai supprimé la classe de migration de fichiers
J'ai lancé un complément de commande de migration
Quand j'question de la mise à jour de la base de données de commande j'obtiens l'erreur suivante:
Système.Les données.SqlClient.SqlException (0x80131904): Impossible de trouver le
objet ' dbo.CorrectiveActionPlan", car il n'existe pas ou vous ne
pas les autorisations. au
Système.Les données.SqlClient.SqlConnection.OnError(exception SqlException,
Valeur de type Boolean breakConnection, Action1 wrapCloseInAction) at
1 wrapCloseInAction) à
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection, Action
Système.Les données.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) à
Système.Les données.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,
SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj, Boolean& dataReady) à
Système.Les données.SqlClient.SqlCommand.RunExecuteNonQueryTds(String
methodName, Boolean async, Int32 timeout) à
Système.Les données.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1
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
migrationStatements) à
Système.Les données.De l'entité.Les Migrations.L'Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1
1 opérations Booléennes
migrationStatements) at
System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String
migrationId, XDocument targetModel, IEnumerable
le déclassement, Boolean auto) à
Système.Les données.De l'entité.Les Migrations.DbMigrator.ApplyMigration(DbMigration
la migration, DbMigration lastMigration) à
Système.Les données.De l'entité.Les Migrations.L'Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration
la migration, DbMigration lastMigration) à
Système.Les données.De l'entité.Les Migrations.DbMigrator.La Mise À Niveau(IEnumerable1
1
pendingMigrations, String targetMigrationId, String lastMigrationId)
at
System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable
pendingMigrations, Chaîne targetMigrationId, Chaîne lastMigrationId)
au Système.Les données.De l'entité.Les Migrations.DbMigrator.Mise À Jour(String
targetMigration) à
Système.Les données.De l'entité.Les Migrations.L'Infrastructure.MigratorBase.Mise À Jour(String
targetMigration) à
Système.Les données.De l'entité.Les Migrations.De la conception.ToolingFacade.UpdateRunner.RunCore()
au Système.Les données.De l'entité.Les Migrations.De la conception.ToolingFacade.BaseRunner.Run()
ClientConnectionId:a6e92a35-cc9e-4867-97a5-0a274081d853 Ne peut pas trouver
l'objet ' dbo.CorrectiveActionPlan" parce qu'il n'existe pas ou vous
n'avez pas les autorisations.
Comment puis-je la force EF de recréer la table?
source d'informationauteur James Helms
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé ma réponse.
J'ai supprimé la ligne dans [dbo].[__MigrationHistory] qui correspondait à ma Migration
J'ai ensuite supprimé le nouveau fichier de migration
Je re-couru ajoutez-la migration
et puis re-couru à la mise à jour de la base de données -verbose
Il ya quelques options que je garde dans mon arsenal pour code-première migrations et ils dépendent de pourquoi vous avez besoin de supprimer des tables ou supprimer les enregistrements. Voici ma méthode:
Si vous avez modifié les modèles et les mappages sont à l'origine d'une erreur qui vous empêche de ne pas être en mesure de mettre à jour les tables vous pourriez Supprimer l'intégralité de la base de données en utilisant SQL Serveur de Gestion de Studio & Supprimer la Migration dossier Vous souhaitez enregistrer un script pour remplir à nouveau vos données de test à l'aide d'un script sql ou enregistrer votre Configuration.cs fichier et lorsque vous exécutez la mise à jour de la base de données de commande, les données seront re-remplis.
Voici un exemple de script pour qu'une procédure stockée il suffit de déposer le tableau de données:
Si vous voulez juste pour déplacer les données, vous pouvez utiliser le gestionnaire de paquets de commande de la console:
PM> Update-Database -TargetMigration $InitialDatabase
& supprimer le fichier de migration créé ie: '201502210525393_example_with_error.cs' et ré-exécutez " Ajout-Migration new_example.cs " de nouveau. Cela met de la base de données de retour à son capture instantanée initialeOu vous pouvez utiliser votre méthode: supprimer la ligne dans
[dbo].[__MigrationHistory]
& fichier de migration ie: '201502210525393_example_with_error.cs", puis exécutez de nouveauadd-migration
etupdate-database
Vous pouvez simplement supprimer la base de données puis à partir du gestionnaire de paquets de la console exécuter les mises à jour de la base de données de "commande", tout serait recréé y compris les mises à jour que vous avez fait.