Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 27080|Отговор: 0

[Източник] Обновете базата си данни с миграция Code First

[Копирай линк]
Публикувано в 7.06.2018 г. 15:56:58 ч. | | |
Код Първо Миграция, можете да актуализирате промените в модела в кода си към базата данни, за да използвате 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 bulkCopyHandleler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   В System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean&usedCache, Boolean 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 цел, Func'3 операция, 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 connection)
   в 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 operation)
   В System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   В System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction)
   In System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements)
   в 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, Boolean downgrading)
   В System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean понижаване)
   в 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()
   в System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   в 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