Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 27080|Odpowiedź: 0

[Źródło] Zaktualizuj swoją bazę danych poprzez migrację Code First

[Skopiuj link]
Opublikowano 07.06.2018 15:56:58 | | |
Code First Migration, możesz zaktualizować zmiany modelu w kodzie do bazy danych, aby użyć Code First Migration, najpierw musisz ją otworzyć:

W konsoli Tools-NuGet Package Manager-Package Manager wpisz: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, naciśnij enter. (Należy zauważyć, że musisz zdefiniować kontekst, którego potrzebujesz, ponieważ kontekst uwierzytelniania jest automatycznie tworzony podczas tworzenia projektu.) Po zakończeniu tworzony jest folder Migrations, który zawiera klasę Configuration.cs.

W tym momencie potrzebny jest dodatkowy krok, aby Code First działał – jeśli teraz utworzysz migrację, spróbuje on dodać jednostkę kontekstową do bazy danych, ale migracja się nie powiedzie, ponieważ tabele Produkty i kategorie już istnieją w bazie. Najpierw musimy stworzyć migrację, która jest inicjalizowana do empty, a następnie możemy dodać migrację do wszelkich modyfikacji.

PM> Aktualizacja – Baza danych
Określ flagę "-Verbose", aby zobaczyć instrukcje SQL zastosowane do docelowej bazy danych.
Brak oczekujących migracji jawnych.
Stosowanie automatycznej migracji: 201806070740457_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): Obiekt o nazwie 'Account' już istnieje w bazie danych.
   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()
   W 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 wykonywana, Action'3 wykonywana)
   W System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   W System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   W System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   W System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction transaction , DbInterceptionContext interceptionContext)
   W System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext)
   W System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext)
   W System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   W 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 stronie System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30()
   W System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operation)
   W System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   W System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction)
   W System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable'1 migrationStatements)
   W System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable'1 operations, IEnumerable'1 systemOperations, Boolean obniżanie klasy, auto booleańskie)
   at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, boolean downgrading)
   W System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean obniżenie klasy)
   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)
   na stronie System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   W 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)
   W 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
Numer błędu: 2714,Stan:6,Klasa:16
Obiekt o nazwie "Konto" już istnieje w bazie danych.

Jeśli napotkasz powyższy błąd, wpisz Add-Migration InitialCreate -IgnoreChanges w konsoli Menedżera Pakietów, aby utworzyć pustą migrację.

Logo IgnoreChanges służy do zapewnienia, że nic nie zostanie zrobione w związku z tą migracją. Robiąc to, tworzy się tabela migracji w bazie danych, która jest migawką bazy danych przed jej migracją.

Następnie wprowadź update-database w konsoli menedżera pakietów, aby zaktualizować migrację inicjalizacji do bazy danych.

Po inicjalizacji migracji zaktualizuj bazę danych za pomocą Code First Migration:

Dodaj kolumnę Descrip{filter}tion do tabeli produktu i ustaw długość na 50, ([StringLength(50)]); Teraz dodaj nową migrację, aby zaktualizować zmiany w bazie danych.

W konsoli Menedżera Pakietów wpisz:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) doda plik do folderu Migracje opisujący migrację. Następnie w konsoli Menedżera Pakietów wpisz:

aktualizacja-baza danych, nowa kolumna zostanie dodana do tabeli Produkty.





Poprzedni:Demonstracja połączenia komunikacji portowej TCP
Następny:asp.net mvc korzysta z lokalnego widoku RenderAction do ładowania danych dynamicznych
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com