Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 27080|Odgovoriti: 0

[Vir] Posodobite svojo bazo podatkov z migracijo Code First

[Kopiraj povezavo]
Objavljeno na 7. 06. 2018 15:56:58 | | |
Pri migraciji Code First lahko posodobite spremembe modela v svoji kodi v bazi podatkov, za uporabo migracije Code First jo morate najprej odpreti:

V konzoli Tools-NuGet Package Manager-Package Manager vpišite: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext in pritisnite enter. (Upoštevajte, da morate definirati kontekst, ki ga morate uporabiti, ker se avtentikacijski kontekst samodejno ustvari ob ustvarjanju projekta.) Ko je to končano, se ustvari mapa Migrations, ki vsebuje razred Configuration.cs.

V tem trenutku je potreben dodaten korak, da Code First deluje; če zdaj ustvarite migracijo, bo poskušal dodati kontekstualno entiteto v bazo podatkov, migracija pa bo spodletela, ker so tabele Izdelki in kategorije že v podatkovni bazi. Najprej moramo ustvariti migracijo, ki je inicializirana na empty, nato pa lahko dodamo migracijo k morebitnim spremembam.

PM> Posodobitev-Baza podatkov
Določite zastavico "-Verbose" za ogled SQL ukazov, uporabljenih na ciljni bazi podatkov.
Ni predvidenih eksplicitnih migracij.
Uporaba samodejne migracije: 201806070740457_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): V bazi že obstaja objekt z imenom '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 se izvaja, Action'3 izvaja)
   V System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   V 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 transakcija , 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)
   V System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable'1 migrationStatements)
   V System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable'1 operations, IEnumerable'1 systemOperations, Boolean znižanje nadgrade, Boolean auto)
   at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgradeing)
   V System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean znižanje razreda)
   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)
   at 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()
   V System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d
Napaka številka:2714,Država:6,Razred:16
Objekt z imenom 'Account' že obstaja v bazi podatkov.

Če naletite na zgornjo napako, vpišite Add-Migration InitialCreate -IgnoreChanges v konzoli Package Manager, da ustvarite prazno migracijo.

Logotip IgnoreChanges se uporablja, da zagotovi, da se pri tej migraciji ne ukrepa nič. S tem se v bazi ustvari tabela migracij, ki je posnetek baze pred njeno migracijo.

Nato vnesite update-database v konzolo upravitelja paketov, da posodobite migracijo inicializacije v bazo.

Po inicializaciji migracije posodobite bazo podatkov z uporabo migracije Code First:

Dodajte stolpec Descrip{filter}tion v tabelo produktov in nastavite dolžino na 50, ([StringLength(50)]); Zdaj dodajte novo migracijo za posodobitev sprememb v bazi podatkov.

V konzoli Upravitelja paketov vnesite:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) bo dodal datoteko v mapo Migracije, ki opisuje migracijo. Nato v konzoli Package Manager vtipkajte:

Posodobitev-baza podatkov, novi stolpec bo dodan v tabelo Produkti.





Prejšnji:Demo povezave TCP portov
Naslednji:asp.net mvc uporablja lokalni pogled RenderAction za nalaganje dinamičnih podatkov
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com