Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 27080|Odpoveď: 0

[Zdroj] Aktualizujte svoju databázu migráciou Code First

[Kopírovať odkaz]
Zverejnené 7. 6. 2018 15:56:58 | | |
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.





Predchádzajúci:Demo pripojenia TCP portovej komunikácie
Budúci:asp.net MVC používa lokálny pohľad RenderAction na načítanie dynamických dát
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com