Code First Migration, môžete aktualizovať zmeny modelu vo vašom kóde do databázy, na použitie Code First Migration ju najprv musíte otvoriť:
V konzole Tools-NuGet Package Manager-Package Manager napíšte: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext stlačte enter. (Upozorňujeme, že musíte definovať kontext, ktorý potrebujete použiť, pretože autentifikačný kontext sa automaticky vytvorí pri vytváraní projektu.) Po dokončení sa vytvorí priečinok Migrations, ktorý obsahuje triedu Configuration.cs.
V tomto bode je potrebný ďalší krok, aby Code First fungoval – ak teraz vytvoríte migráciu, pokúsi sa pridať kontextovú entitu do databázy a migrácia zlyhá, pretože tabuľky Produkty a kategórie už v databáze existujú. Najprv potrebujeme vytvoriť migráciu, ktorá sa inicializuje na prázdne, a potom môžeme pridať migráciu k akýmkoľvek úpravám.
PM> Aktualizácia-Databáza Zadajte príznak "-Verbose" na zobrazenie SQL príkazov aplikovaných na cieľovú databázu. Žiadne plánované explicitné migrácie. Aplikácia automatickej migrácie: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): V databáze už existuje objekt s názvom 'Account'. 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) In 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() V System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 c) In System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func'3 operation, TInterceptionContext interceptionContext, Action'3 vykonaná, Action'3 vykonaná) V System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) In System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() V System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) V System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transakcia , DbInterceptionContext interceptionContext) V System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) V System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) V System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) V System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection) na System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30() V System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operation) V System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) V System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements) at 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 Znižovanie ročníka, 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 degradácia) 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) V System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse. <Update>b__d() at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) na stránkach System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) V System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() In System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d Chybové číslo: 2714,Štát:6,Trieda:16 Objekt s názvom 'Account' už v databáze existuje.
Ak narazíte na vyššie uvedenú chybu, zadajte Add-Migration InitialCreate -IgnoreChanges v konzole Package Manager, aby ste vytvorili prázdnu migráciu.
Logo IgnoreChanges sa používa, aby sa zabezpečilo, že sa s touto migráciou nič nerobí. Tým sa vytvorí tabuľka migrácií v databáze, ktorá je snímkou databázy pred jej migráciou.
Ďalej zadajte update-database v konzole správcu balíkov, aby ste aktualizovali migráciu inicializácie do databázy.
Po inicializácii migrácie aktualizujte databázu pomocou Code First Migration:
Pridajte stĺpec Descrip{filter}tion do tabuľky produktov a nastavte dĺžku na 50, ([StringLength(50)]); Teraz pridajte novú migráciu na aktualizáciu zmien v databáze.
V konzole Správcu balíkov zadajte:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) pridá súbor do priečinka Migrations na popis migrácie. Ďalej v konzole Správcu balíkov napíšte:
update-database, nový stĺpec bude pridaný do tabuľky Produkty.
|