Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 27080|Ответ: 0

[Источник] Обновите свою базу данных с помощью миграции Code First.

[Скопировать ссылку]
Опубликовано 07.06.2018 15:56:58 | | |
Код First Migration: вы можете обновить изменения в модели в вашем коде в базу данных, чтобы использовать Code First Migration, сначала нужно её открыть:

В консоли Tools-NuGet Package Manager-Package Manager введите тип: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext нажмите Enter. (Обратите внимание, что вам нужно определить контекст, который нужно использовать, потому что контекст аутентификации автоматически создаётся при создании проекта.) После завершения создаётся папка Migrations, содержащая класс Configuration.cs.

На этом этапе требуется дополнительный шаг для работы Code First: если вы создаете миграцию сейчас, она попытается добавить контекстную сущность в базу данных, и миграция провалится, потому что таблицы продуктов и категорий уже существуют в базе данных. Сначала нужно создать миграцию, инициализированную в пустую, а затем добавить миграцию к любым изменениям.

PM> Обновление базы данных
Закажите флаг «-Verbose» для просмотра SQL-операторов, применяемых к целевой базе данных.
Нет ожидаемых явных миграций.
Применение автоматической миграции: 201806070740457_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): Объект с именем '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)
   В 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, булев async, Int32 timeout, булев asyncWrite)
   В System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, булевый sendToPipe, тайм-аут Int32, Boolean&usedCache, булев asyncWrite, булев в Retry)
   В System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   В System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 c)
   В System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func'3 operation, TInterceptionContext interceptionContext, Action'3 выполняется, Action'3 выполнено)
   В System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   В System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   В System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, dbTransaction transaction, DbInterceptionContext ПерехватКонтекст)
   В System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, dbTransaction transaction , DbПерехватКонтекст, перехватКонтекст)
   В System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, dbTransaction transaction, dbПерехватКонтекст перехватаКонтекст)
   В System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction transaction, dbInterceptionContext ПерехватКонтекст)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext ПерехватКонтекст)
   В System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, соединение DbConnection)
   на сайте System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30()
   В System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](операция Func'1)
   В System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(операция действия)
   В 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)
   В System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable'1 operations, IEnumerable'1 systemOperations, булев понижение, булева автосистема)
   at System.Data.Entity.Migrations.DbMigrator.AutoMigrate (String migrationId, VersionedModel sourceModel, VersionedModel targetModel, булевое понижение)
   В System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, булев понижение)
   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)
   на System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   В 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)
   на System.Data.Entity.Migrations.DbMigrator.Update (String targetMigration)
   В System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update (String targetMigration)
   на System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   В System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d
Номер ошибки: 2714, штат: 6, класс: 16
Объект с названием «Account» уже существует в базе данных.

Если вы столкнулись с вышеуказанной ошибкой, введите Add-Migration InitialCreate -IgnoreChanges в консоли Package Manager, чтобы создать пустую миграцию.

Логотип IgnoreChanges используется для того, чтобы гарантировать, что для этой миграции ничего не предпринимается. При этом создаётся таблица миграций в базе данных, которая представляет собой снимок базы данных до её миграции.

Далее введите update-database в консоль менеджера пакетов, чтобы обновить инициализацию миграции в базу данных.

После инициализации миграции обновите базу данных с помощью Code First Migration:

Добавьте столбец Descrip{filter}tion в таблицу Product и установите длину на 50, ([StringLength(50)]); Теперь добавьте новую миграцию для обновления изменений в базе данных.

В консоли Package Manager введите:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) добавит файл в папку Migrations для описания миграции. Далее, в консоли Package Manager, введите:

update-database, новый столбец будет добавлен в таблицу «Продукты».





Предыдущий:Демонстрация подключения TCP-порта
Следующий:asp.net mvc использует локальный вид RenderAction для загрузки динамических данных
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com