Code 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): Ένα αντικείμενο με το όνομα "Λογαριασμός" υπάρχει ήδη στη βάση δεδομένων. στο 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) στο 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, Boolean inRetry) Στο System.Data.SqlClient.SqlCommand.ExecuteNonQuery() Στο System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher. <NonQuery>b__0(DbCommand t, DbCommandInterceptionContext'1 γ) In System.Data.Entity.Infrastructure.Interception.InternalDispatcher'1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func'3 operation, TInterceptionContext interceptionContext, Ενέργεια'3 εκτελείται, Ενέργεια'3 εκτελείται) Στο System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(εντολή DbCommand, DbCommandInterceptionContext interceptionContext) Στο System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() Στο System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) Στο System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, σύνδεση DbConnection, συναλλαγή DbTransaction , DbInterceptionContext interceptionContext) Στο System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) Στο System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction transaction, DbInterceptionContext interceptionContext) Στο System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) Στο System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) στο 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) Στο 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, Boolean υποβάθμιση, Boolean auto) στο 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 υποβάθμισης) στο System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId) στο System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable'1 pendingMigrations, String targetMigrationId, String lastMigrationId) στο System.Data.Entity.Migrations.DbMigrator.UpdateInternal(Συμβολοσειρά 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(Συμβολοσειρά 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 Ένα αντικείμενο με το όνομα «Λογαριασμός» υπάρχει ήδη στη βάση δεδομένων.
Εάν αντιμετωπίσετε το παραπάνω σφάλμα, πληκτρολογήστε Add-Migration InitialCreate -IgnoreChanges στην κονσόλα Package Manager για να δημιουργήσετε μια κενή μετεγκατάσταση.
Το λογότυπο IgnoreChanges χρησιμοποιείται για να διασφαλιστεί ότι δεν γίνεται τίποτα για αυτήν τη μετεγκατάσταση. Με αυτόν τον τρόπο δημιουργείται ένας πίνακας μετεγκατάστασης στη βάση δεδομένων, ο οποίος είναι ένα στιγμιότυπο της βάσης δεδομένων πριν από τη μετεγκατάστασή της.
Στη συνέχεια, εισαγάγετε update-database στην κονσόλα διαχείρισης πακέτων για να ενημερώσετε τη μετεγκατάσταση προετοιμασίας στη βάση δεδομένων.
Μετά την προετοιμασία της μετεγκατάστασης, ενημερώστε τη βάση δεδομένων χρησιμοποιώντας το Code First Migration:
Προσθέστε τη στήλη Περιγραφή{filter}tion στον πίνακα Product και ορίστε το μήκος σε 50, ([StringLength(50)]); Τώρα προσθέστε μια νέα μετεγκατάσταση για να ενημερώσετε τις αλλαγές στη βάση δεδομένων.
Στην κονσόλα Package Manager, πληκτρολογήστε:Add-Migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) θα προσθέσει ένα αρχείο στο φάκελο Migrations για να περιγράψει τη μετεγκατάσταση. Στη συνέχεια, στην κονσόλα Package Manager, πληκτρολογήστε:
update-βάση δεδομένων, η νέα στήλη θα προστεθεί στον πίνακα Προϊόντα.
|