Code First Migration, du kan opdatere dine ændringer til modellen i din kode til databasen, for at bruge Code First Migration skal du først åbne den:
I Tools-NuGet Package Manager-Package Manager-konsollen, typ: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, tryk på Enter. (Bemærk, at du skal definere den kontekst, du skal bruge, fordi autentificeringskonteksten automatisk oprettes, når du opretter projektet.) Når det er gjort, oprettes en Migrations-mappe, som indeholder en Configuration.cs-klasse.
På dette tidspunkt kræves der et ekstra trin for at få Code First til at fungere; hvis du opretter en migration nu, vil den forsøge at tilføje den kontekstuelle enhed til databasen, og migreringen vil fejle, fordi produkt- og kategoritabellerne allerede findes i databasen. Så først skal vi oprette en migration, der initialiseres til tom, og derefter kan vi tilføje en migration til eventuelle ændringer.
PM> Opdateringsdatabase Angiv "-Verbose"-flaget for at se SQL-sætningerne, der anvendes på måldatabasen. Ingen afventende eksplicitte migrationer. Anvendelse af automatisk migration: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): Et objekt ved navn 'Account' findes allerede i databasen. 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) 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, boolesk inRetry) I System.Data.SqlClient.SqlCommand.ExecuteNonQuery() I System.Data.Entity.Infrastructure.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 operation, TInterceptionContext interceptionKontekst, Handling'3 udfører, Handling'3 udfø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 transaction, DbInterceptionContext aflytningKontekst) I System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction-transaktion , DbInterceptionKontekst aflytningKontekst) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection-forbindelse, DbTransaction-transaktion, DbInterceptionKontekst aflytningKontekst) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction-transaktion, DbInterceptionContext aflytningKontekst) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection-forbindelse, DbInterceptionContext aflytningKontekst) I System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection-forbindelse, 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 operation) 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, Boolean nedgradering, boolesk auto) på System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, boolean 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(Streng targetMigration) I System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(Streng 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 Fejlnummer: 2714, Stat: 6, Klasse: 16 Et objekt ved navn 'Konto' findes allerede i databasen.
Hvis du støder på ovenstående fejl, skal du skrive Add-Migration InitialCreate -IgnoreChanges i Package Manager-konsollen for at oprette en tom migration.
IgnoreChanges-logoet bruges til at sikre, at der ikke gøres noget ved denne migration. Når du gør det, oprettes en migrationstabel i databasen, som er et øjebliksbillede af databasen, før den migreres.
Indtast dernæst update-database i pakkehåndteringskonsollen for at opdatere initialiseringsmigreringen til databasen.
Når migreringen er initialiseret, opdateres databasen ved hjælp af Code First Migration:
Tilføj kolonnen Descrip{filter}tion til produkttabellen og sæt længden til 50, ([StringLength(50)]); Tilføj nu en ny migration for at opdatere ændringerne i databasen.
I Package Manager-konsollen indtaster:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) tilføjer en fil til Migrations-mappen for at beskrive migreringen. Dernæst skriver du i Pakkehåndteringskonsollen:
opdateringsdatabase, vil den nye kolonne blive tilføjet til Produkttabellen.
|