Code First Migration, du kan oppdatere endringene dine i modellen i koden din til databasen, for å bruke Code First Migration må du først åpne den:
I Tools-NuGet Package Manager-Package Manager-konsollen, skriv: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, trykk Enter. (Merk at du må definere konteksten du skal bruke fordi autentiseringskonteksten automatisk opprettes når du oppretter prosjektet.) Når det er gjort, opprettes en Migrations-mappe som inneholder en Configuration.cs klasse.
På dette tidspunktet kreves et ekstra steg for å få Code First til å fungere; hvis du lager en migrering nå, vil den prøve å legge til den kontekstuelle enheten i databasen, og migreringen vil mislykkes fordi tabellene for produkter og kategorier allerede finnes i databasen. Først må vi lage en migrering som initialiseres til tom, og deretter kan vi legge til en migrasjon til eventuelle endringer.
PM> Oppdateringsdatabase Spesifiser flagget "-Verbose" for å se SQL-setningene som er brukt på måldatabasen. Ingen pågående eksplisitte migrasjoner. Anvendelse av automatisk migrering: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): Et objekt kalt 'Account' finnes allerede i databasen. på System.Data.SqlClient.SqlConnection.OnError(SqlException-unntak, boolsk breakConnection, Action'1 wrapCloseInAction) på System.Data.SqlClient.SqlInternalConnection.OnError(SqlException-unntak, boolsk breakConnection, Action'1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) I 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& usedCache, Boolean asyncWrite, boolsk inRetry) In System.Data.SqlClient.SqlCommand.ExecuteNonQuery() I System.Data.Entitet.Infrastruktur.Interception.DbCommandDispatcher. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 c) I System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func'3 operasjon, TInterceptionContext interceptionContext, Action'3 utføres, Action'3 utført) I System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand kommando, DbCommandInterceptionContext interceptionContext) I System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() I System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction-transaksjon, DbInterceptionContext avskjæringKontekst) I System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction-transaksjon , DbInterceptionContext interceptionContext) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction-transaksjon, DbInterceptionContext interceptionContext) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction-transaksjon, DbInterceptionContext avskjæringKontekst) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext avskjæringKontekst) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) på System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection) på System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30() I System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operasjon) I System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements) på System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable'1 migrationStatements) I System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable'1 operations, IEnumerable'1 systemOperations, boolsk nedgradering, boolsk bil) på System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, boolsk nedgradering) I System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean nedgradering) på System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable'1 pendingMigrations, streng targetMigrationId, streng lastMigrationId) på System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable'1 pendingMigrations, streng targetMigrationId, streng lastMigrationId) på System.Data.Entity.Migrations.DbMigrator.UpdateInternal(Streng targetMigration) I System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse. <Update>b__d() på System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) på System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) på System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) I System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) på System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() I System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d Feilnummer: 2714, Stat: 6, Klasse: 16 Et objekt kalt 'Konto' eksisterer allerede i databasen.
Hvis du støter på feilen ovenfor, skriv Add-Migration InitialCreate -IgnoreChanges i Package Manager-konsollen for å opprette en tom migrering.
IgnoreChanges-logoen brukes for å sikre at ingenting gjøres for denne migreringen. Å gjøre dette oppretter en migreringstabell i databasen, som er et øyeblikksbilde av databasen før den migreres.
Deretter skriver du inn update-database i pakkehåndteringskonsollen for å oppdatere initialiseringsmigreringen til databasen.
Etter at migreringen er initialisert, oppdater databasen ved hjelp av Code First Migration:
Legg til kolonnen Descrip{filter}tion i produkttabellen og sett lengden til 50, ([StringLength(50)]); Legg nå til en ny migrering for å oppdatere endringene i databasen.
I Package Manager-konsollen skriver du inn:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) vil legge til en fil i Migrations-mappen for å beskrive migreringen. Deretter, i Package Manager-konsollen, skriv:
update-database, vil den nye kolonnen bli lagt til i Produkter-tabellen.
|