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.
|