Code First Migration, saad uuendada oma muudatusi mudelis oma koodis andmebaasi, Code First Migrationi kasutamiseks pead esmalt selle avama:
Tools-NuGet Package Manager-Package Manager konsoolis kirjuta: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, vajuta Enter. (Pane tähele, et pead määratlema kasutatava konteksti, sest autentimiskontekst luuakse automaatselt projekti loomisel.) Kui see on tehtud, luuakse Migrations kaust, mis sisaldab Configuration.cs klassi.
Selles etapis on vaja veel üht sammu, et Code First toimiks, kui teed migratsiooni nüüd, üritab see lisada kontekstuaalse üksuse andmebaasi ja migratsioon ebaõnnestub, sest toote- ja kategooriatabelid on andmebaasis juba olemas. Esmalt peame looma migratsiooni, mis initsialiseeritakse tühjaks, ja seejärel saame lisada migratsiooni igale muudatusele.
PM> Uuendus-andmebaas Määrake "-Verbose" lipp, et näha sihtandmebaasile rakendatud SQL-lauseid. Ei mingeid otseseid migratsioone. Automaatse migratsiooni rakendamine: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): Objekt nimega 'Konto' eksisteerib juba andmebaasis. 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) In System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, 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) System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget sihtmärk, Func'3 operatsioon, TInterceptionContext interceptionContext, Action'3 täidetakse, Action'3 täidetakse) System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand käsk, DbCommandInterceptionContext interceptionContext) In System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() 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 connection, DbTransaction transaction , DbInterceptionContext interceptionContext) System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext InterceptionContext) In 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) aadressil System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection) aadressil 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 operatsioon) 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) aadressil 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 alandamine, 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 alandamine) 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() aadressil System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) aadressil System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) aadressil System.Data.Entity.Migrations.DbMigrator.Update(string targetMigration) System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update (string targetMigration) aadressil System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() In System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d Veanumber:2714,State:6,Klass:16 Objekt nimega 'Konto' eksisteerib juba andmebaasis.
Kui tekib ülaltoodud viga, kirjuta Package Manager konsoolisse Add-Migration InitialCreate -IgnoreChanges, et luua tühi migratsioon.
IgnoreChanges logo kasutatakse selleks, et tagada selle migratsiooni jaoks midagi ei tehta. Seda tehes luuakse andmebaasis migratsioonitabel, mis on andmebaasi hetktõmmis enne selle migreerimist.
Seejärel sisesta paketihalduri konsooli update-database, et uuendada initsialiseerimise migratsiooni andmebaasi.
Pärast migratsiooni initsialiseerimist uuenda andmebaasi Code First migratsiooni abil:
Lisa Descrip{filter}tion veerg toote tabelisse ja määra pikkuseks 50, ([StringLength(50)]); Nüüd lisa uus migratsioon, et andmebaasi muudatusi uuendada.
Package Manager konsoolis sisesta:Add-migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) lisab migratsiooni kausta faili, et kirjeldada migratsiooni. Järgmisena sisesta Package Manager konsooli:
uuendus-andmebaas, uus veerg lisatakse toodete tabelisse.
|