Code First Migratie, je kunt je wijzigingen aan het model in je code bijwerken in de database, om Code First Migration te gebruiken, moet je het eerst openen:
In de Tools-NuGet Package Manager-Package Manager-console typ: Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext, druk op Enter. (Let op: je moet de context definiëren die je moet gebruiken, omdat de authenticatiecontext automatisch wordt aangemaakt wanneer je het project aanmaakt.) Na voltooiing wordt een Migratie-map aangemaakt, die een Configuration.cs klasse bevat.
Op dit punt is er een extra stap nodig om Code First werkend te krijgen; als je nu een migratie maakt, zal het proberen de contextuele entiteit aan de database toe te voegen, en de migratie zal mislukken omdat de Producten- en categorieëntabellen al in de database bestaan. Dus eerst moeten we een migratie maken die op leeg wordt geïnitialiseerd, en dan kunnen we een migratie toevoegen aan eventuele aanpassingen.
PM> Update-Database Specificeer de "-Verbose"-vlag om de SQL-instructies te bekijken die op de doeldatabase zijn toegepast. Geen lopende expliciete migraties. Automatische migratie toepassen: 201806070740457_AutomaticMigration. System.Data.SqlClient.SqlException (0x80131904): Een object genaamd 'Account' bestaat al in de database. at System.Data.SqlClient.SqlConnection.OnError(SqlException-uitzondering, Boolean breakConnection, Action'1 wrapCloseInAction) op System.Data.SqlClient.SqlInternalConnection.OnError(SqlException-uitzondering, 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&useCache, Boolean asyncWrite, Booleaan inRetry) In System.Data.SqlClient.SqlCommand.ExecuteNonQuery() In 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 onderscheppingContext, Actie'3 uitgevoerd, Actie'3 uitgevoerd) In System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) In System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() In System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnectionconnection, DbTransaction-transactie, DbInterceptionContext interceptionContext) In System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnectionconnection, DbTransaction-transactie , DbInterceptionContext interceptionContext) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection-verbinding, DbTransaction-transactie, DbInterceptionContext InterceptionContext) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction-transactie, DbInterceptionContext interceptionContext) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection-verbinding, DbInterceptionContext) interceptionContext) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection-verbinding, DbInterceptionContext interceptionContext) bij System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection-verbinding) op System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30() In System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1. <Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operation) In System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction) In System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements) op 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 downgrading, Boolean auto) op 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 Downgrade) op System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable'1 pendingMigrations, string targetMigrationId, string lastMigrationId) op System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId) op System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) In System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse. <Update>b__d() bij System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) bij System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) op System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) In System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) op System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() In System.Data.Entity.Migraties.Design.ToolingFacade.BaseRunner.Run()
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d Foutnummer: 2714, Staat:6, Klas: 16 Er bestaat al een object genaamd 'Account' in de database.
Als je bovenstaande fout tegenkomt, typ dan Add-Migration InitialCreate -IgnoreChanges in de Package Manager-console om een lege migratie te maken.
Het IgnoreChanges-logo wordt gebruikt om ervoor te zorgen dat er niets wordt gedaan voor deze migratie. Hierdoor wordt een migratietabel in de database aangemaakt, die een snapshot is van de database voordat deze wordt gemigreerd.
Vervolgens voer je update-database in in de package manager-console om de initialisatiemigratie naar de database bij te werken.
Nadat de migratie is geïnitialiseerd, werk je de database bij met Code First Migratie:
Voeg de Descrip{filter}tion-kolom toe aan de Producttabel en stel de lengte in op 50, ([StringLength(50)]); Voeg nu een nieuwe migratie toe om de wijzigingen in de database bij te werken.
In de Package Manager-console voert u het volgende in:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) zal een bestand toevoegen aan de Migratie-map om de migratie te beschrijven. Vervolgens typ in de Package Manager-console:
update-database, de nieuwe kolom wordt toegevoegd aan de Producten-tabel.
|