Code First Migrationissa voit päivittää mallin muutokset koodissasi tietokantaan, Code First Migrationin käyttämiseksi sinun täytyy ensin avata se:
Tools-NuGet Package Manager-Package Manager -konsolissa kirjoita: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, paina Enter. (Huomaa, että sinun täytyy määritellä käytettävä konteksti, koska autentikointikonteksti luodaan automaattisesti, kun luot projektin.) Kun se on valmis, luodaan Migrations-kansio, joka sisältää Configuration.cs-luokan.
Tässä vaiheessa tarvitaan ylimääräinen vaihe, jotta Code First toimii, jos luot migraation nyt, se yrittää lisätä kontekstuaalisen entiteetti tietokantaan, mutta migraatio epäonnistuu, koska Products- ja kategoria-taulut ovat jo olemassa tietokannassa. Ensin täytyy luoda migraatio, joka alustetaan tyhjäksi, ja sitten voimme lisätä migraation kaikkiin muutoksiin.
PM> Päivitys-Tietokanta Määritä "-Verbose"-lippu nähdäksesi kohdetietokantaan sovellettavat SQL-lauseet. Ei vireillä olevia eksplisiittisiä siirtoja. Automaattisen migraation soveltaminen: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): Olio nimeltä 'Account' on jo olemassa tietokannassa. 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) 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) System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean&usedCache, Boolean asyncWrite, Boolean inRetry) System.Data.SqlClient.SqlCommand.ExecuteNonQuery() -tiedostossa System.Data.Entity.Infrastructure.Interception.DbCommandDispatcherissa. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 c) System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func'3-operaatio, TInterceptionContext interceptionContext, Action'3 suoritetaan, Action'3 suoritetaan) System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand-komento, DbCommandInterceptionContext interceptionContext) System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() -tiedostossa In System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql (MigrationStatement migrationStatement, DbConnection, DbTransaction transaction , DbInterceptionContext interceptionContext) System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection-yhteys, DbTransaction-transaktio, DbInterceptionContext interceptionContext) System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1) migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) osoitteessa System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection) osoitteessa 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) System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) System.Data.Entity.Migrations.DbMigrator.ExecuteStatements (IEnumerable'1 migrationStatements, DbTransaction existingTransaction) System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements) osoitteessa 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 alennus, Boolean auto) at 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 alennus) at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) In System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse. <Update>b__d() osoitteessa System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) osoitteessa System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update(merkkijono targetMigration) System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) osoitteessa System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() In System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d Virhenumero:2714,Osavaltio:6,Luokka:16 Olio nimeltä 'Account' on jo olemassa tietokannassa.
Jos kohtaat yllä olevan virheen, kirjoita Package Manager -konsoliin Add-Migration InitialCreate -IgnoreChanges luodaksesi tyhjän migraation.
IgnoreChanges-logoa käytetään varmistamaan, ettei siirrolle tehdä mitään. Tämä luo migraatiotaulukon tietokantaan, joka on tietokannan tilannekuva ennen siirtoa.
Seuraavaksi syötä update-database paketinhallintakonsoliin päivittääksesi alustusmigraatio tietokantaan.
Kun migraatio on alustettu, päivitä tietokanta Code First Migration -menetelmällä:
Lisää Descrip{filter}tion-sarake Product-taulukkoon ja aseta pituudeksi 50, ([StringLength(50)]); Lisää nyt uusi migraatio tietokannan muutosten päivittämiseksi.
Package Manager -konsolissa syötä seuraava:Add-migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) lisää tiedoston Migrations-kansioon kuvaamaan migraatiota. Seuraavaksi kirjoita Package Manager -konsoliin:
päivitys-tietokanta, uusi sarake lisätään Tuotteet-taulukkoon.
|