La Code First Migration, poți actualiza modificările modelului din codul tău către baza de date, pentru a folosi Code First Migration, mai întâi trebuie să o deschizi:
În consola Tools-NuGet Package Manager-Package Manager, tip: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, apasă Enter. (Rețineți că trebuie să definiți contextul pe care doriți să îl folosiți deoarece contextul de autentificare este creat automat când creați proiectul.) Odată finalizat, se creează un folder Migrații, care conține o clasă Configuration.cs.
În acest moment, este necesar un pas suplimentar pentru ca Code First să funcționeze, dacă creezi o migrare acum, va încerca să adauge entitatea contextuală în baza de date, iar migrarea va eșua pentru că tabelele Produse și categorii există deja în baza de date. Mai întâi trebuie să creăm o migrație inițializată la vid, apoi putem adăuga o migrație la orice modificări.
PM> Actualizare-Bază de date Specifică flag-ul "-Verbose" pentru a vizualiza instrucțiunile SQL aplicate bazei de date țintă. Fără migrații explicite în așteptare. Aplicarea migrației automate: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): Un obiect numit 'Account' există deja în baza de date. la System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction) la System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action'1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, boolean callerHasConnectionLock, Boolean asyncClose) În System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) la System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, timeout Int32, Boolean asyncWrite) În System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) În System.Data.SqlClient.SqlCommand.ExecuteNonQuery() În System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 c) În System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget țintă, Func'3 operațiune, TintterceptionContext interceptionContext, Acțiune'3 executată, Acțiune'3 executată) În System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(comanda DbComandă, DbComandăInterceptionContext interceptionContext) În System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() În System.Data.Entity.Migrations.DbMigrator.ExecuteSQL (MigrationStatement migrationStatement, conexiune DbConnection, tranzacție DbTransaction, DbInterceptionContext interceptionContext) În System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSQL (MigrationStatement migrationStatement, conexiune DbConnection, tranzacție DbTransaction , DbInterceptionContext interceptionContext) În System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, conexiune DbConnection, tranzacție DbTransaction, DbInterceptionContext interceptionContext) În System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) În System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, conexiune DbConnection, DbInterceptionContext interceptionContext) În System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal (IEnumerable'1 migrațieStatements, conexiune DbConexiune, DbInterceptionContext interceptionContext) la System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, conexiune DbConnection) la System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30() În System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0() la System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operation) În System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) În System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransactionExistingTransaction) În System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements) la System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable'1 migrationStatements) În System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable'1 operations, IEnumerable'1 systemOperations, Boolean retrogradare, automat boolean) la System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, retrogradare booleană) În System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean retrogradare) la System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId) la System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable'1 pending migrations, StringstringTargetMigrationId, String lastMigrationId) la System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) În System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse. <Update>b__d() la System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Acțiunea trebuieSuccesToKeepDatabase) la System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Acțiunea trebuieSuccesPăstraBaza de Date) la System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) În System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) la System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() În System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d Număr de eroare: 2714, Stat: 6, Clasă: 16 Un obiect numit "Account" există deja în baza de date.
Dacă întâmpini eroarea de mai sus, tastează Add-Migration InitialCreate -IgnoreChanges în consola Package Manager pentru a crea o migrare goală.
Sigla IgnoreChanges este folosită pentru a se asigura că nu se face nimic în această migrare. Făcând asta, se creează un tabel de migrații în baza de date, care este o imagine instantanee a bazei de date înainte de a fi migrată.
Apoi, introduceți update-database în consola managerului de pachete pentru a actualiza migrarea inițializării către baza de date.
După ce migrarea este inițializată, actualizează baza de date folosind Code First Migration:
Adaugă coloana Descrip{filter}tion în tabelul Product și setează lungimea la 50, ([StringLength(50)]); Acum adaugă o nouă migrare pentru a actualiza modificările din baza de date.
În consola Package Manager, introduceți:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) va adăuga un fișier în folderul Migrations pentru a descrie migrarea. Apoi, în consola Package Manager, tastezați:
bază de date actualizată, noua coloană va fi adăugată în tabelul Produse.
|