Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 27080|Antwort: 0

[Quelle] Aktualisieren Sie Ihre Datenbank mit der Code-First-Migration

[Link kopieren]
Veröffentlicht am 07.06.2018 15:56:58 | | |
Code First Migration: Sie können Ihre Änderungen am Modell in Ihrem Code in die Datenbank aktualisieren; um Code First Migration zu verwenden, müssen Sie es zuerst öffnen:

In der Tools-NuGet Package Manager-Package Manager-Konsole geben Sie ein: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, drücken Sie Enter. (Beachten Sie, dass Sie den Kontext definieren müssen, den Sie verwenden müssen, da der Authentifizierungskontext automatisch erstellt wird, wenn Sie das Projekt erstellen.) Danach wird ein Migrations-Ordner erstellt, der eine Configuration.cs-Klasse enthält.

An diesem Punkt ist ein zusätzlicher Schritt erforderlich, um Code First zum Laufen zu bringen: Wenn Sie jetzt eine Migration erstellen, wird versucht, die kontextuelle Entität zur Datenbank hinzuzufügen, und die Migration schlägt fehl, weil die Produkt- und Kategorientabellen bereits in der Datenbank existieren. Zuerst müssen wir eine Migration erstellen, die auf leer initialisiert ist, und dann können wir eine Migration zu allen Änderungen hinzufügen.

PM> Update-Datenbank
Gib das "-Verbose"-Flag an, um die SQL-Anweisungen anzuzeigen, die auf die Zieldatenbank angewendet werden.
Keine ausstehenden expliziten Migrationen.
Automatische Migration anwenden: 201806070740457_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): Ein Objekt namens 'Account' existiert bereits in der Datenbank.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception Boolean breakConnection, Action'1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException-Ausnahme, Boolean breakConnection, Action'1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   In 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, Boolean asyncWrite)
   In System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean&useCache, Boolean asyncWrite, boolean inRetry)
   In System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   In System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 c)
   In System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func'3 operation, TInterceptionContext interceptionContext, Action'3 wird ausgeführt, Action'3 wird ausgeführt)
   In System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   In System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   In System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction-Transaktion, DbInterceptionContext InterceptionContext)
   In System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction-Transaktion , DbInterceptionContext InterceptionContext)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction-Transaktion, DbInterceptionContext InterceptionContext)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction-Transaktion, DbInterceptionContext) InterceptionContext)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext InterceptionContext)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   bei System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection)
   unter System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30()
   In System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operation)
   In System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements)
   bei System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable'1 migrationStatements)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable'1 operations, IEnumerable'1 systemOperations, Boolean Downgrading, Boolean Auto)
   bei System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean Downgrading)
   In System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean Downgrading)
   bei System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   bei System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   bei System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   In System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse. <Update>b__d()
   bei System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   bei System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   bei System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   In System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   bei System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   In System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d
Fehlernummer: 2714, Bundesstaat:6, Klasse: 16
Ein Objekt namens 'Account' existiert bereits in der Datenbank.

Wenn Sie auf den oben genannten Fehler stoßen, geben Sie Add-Migration InitialCreate -IgnoreChanges in der Package Manager-Konsole ein, um eine leere Migration zu erstellen.

Das IgnoreChanges-Logo wird verwendet, um sicherzustellen, dass bei dieser Migration nichts unternommen wird. Dadurch wird eine Migrationstabelle in der Datenbank erstellt, die ein Snapshot der Datenbank ist, bevor sie migriert wird.

Als Nächstes geben Sie update-database in der Paketmanager-Konsole ein, um die Initialisierungsmigration in die Datenbank zu aktualisieren.

Nachdem die Migration initialisiert wurde, aktualisieren Sie die Datenbank mit Code First Migration:

Füge die Descrip{filter}tion-Spalte zur Produkttabelle hinzu und setze die Länge auf 50, ([StringLength(50)]); Fügen Sie nun eine neue Migration hinzu, um die Änderungen in der Datenbank zu aktualisieren.

In der Package Manager-Konsole geben Sie ein:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) fügt eine Datei zum Migrations-Ordner hinzu, um die Migration zu beschreiben. Als Nächstes geben Sie in der Package Manager-Konsole ein:

Update-Datenbank, wird die neue Spalte der Tabelle Produkte hinzugefügt.





Vorhergehend:TCP-Portkommunikationsverbindungsdemo
Nächster:asp.net mvc verwendet die lokale RenderAction-Ansicht, um dynamische Daten zu laden
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com