Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 27080|Yanıt: 0

[Kaynak] Code First göçü ile veritabanınızı güncelleyin

[Bağlantıyı kopyala]
Yayınlandı 7.06.2018 15:56:58 | | |
Code First Migration, kodunuzdaki modeldeki değişikliklerinizi veritabanına güncelleyebiliyorsunuz, Code First Migration'ı kullanmak için önce açmanız gerekiyor:

Tools-NuGet Package Manager-Package Manager konsolunda, Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext tuşuna bas. (Kullanmanız gereken bağlamı tanımlamanız gerektiği için proje oluşturulduğunda kimlik bağlamı otomatik olarak oluşturulur.) Tamamlandıktan sonra, Configuration.cs sınıfı içeren bir Migrations klasörü oluşturulur.

Bu noktada, Code First'in çalışması için ekstra bir adım gerekiyor, şimdi bir göç oluşturursanız, veritabanına bağlamsal varlığı eklemeye çalışacak ve geçiş başarısız olacak çünkü Ürünler ve kategoriler tabloları zaten veritabanında mevcut. Önce boş bir geçiş oluşturmamız gerekiyor, ardından herhangi bir değişikliğe göç ekleyebiliriz.

PM> Güncelleme-Veritabanı
Hedef veritabanına uygulanan SQL ifadelerini görmek için "-Verbose" bayrağını belirtin.
Bekleyen açık göçler yok.
Otomatik göç uygulaması: 201806070740457_AutomaticMigration.
System.Data.SqlClient.SqlException (0x80131904): 'Account' adlı bir nesne veritabanında zaten mevcuttur.
   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()
   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher içinde. <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 yürütülüyor, Action'3 yürütülüyor)
   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand komutu, DbCommandInterceptionContext interceptionContext) içinde
   System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery() içinde
   System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext içinde interceptionContext)
   System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction , DbInterceptionContext interceptionContext)
   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection, DbTransaction transaction) içinde, DbInterceptionContext interceptionContext)
   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable'1 migrationStatements, DbTransaction transaction, DbInterceptionContext içinde interceptionContext)
   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext içinde interceptionContext)
   System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal içinde (IEnumerable'1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable'1 migrationStatements, DbConnection connection)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32. <ExecuteStatements>b__30()
   System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1 içinde. <Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func'1 operation)
   In System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements, DbTransaction existingTransaction) içinde
   System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable'1 migrationStatements) içinde
   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, Boolean içinde Boolean otomatik olarak düşürülüyor)
   at 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 düşürülüyor)
   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)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClasse içinde. <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)
   System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) içinde
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
   System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() içinde
ClientConnectionId:dcf676a8-d2b3-4232-89dd-35e15fb8160d
Hata Numarası:2714,Durum:6,Sınıf:16
'Hesap' adlı bir nesne zaten veritabanında mevcuttur.

Yukarıdaki hatayla karşılaşırsanız, Paket Yöneticisi konsolunda Add-Migration InitialCreate -IgnoreChanges yazın ve boş bir göç oluşturun.

IgnoreChanges logosu, bu geçiş için hiçbir şey yapılmamasını sağlamak için kullanılır. Bunu yaparken, veritabanında bir göç tablosu oluşturulur; bu, veritabanının taşınmadan önceki anlık görüntüsüdür.

Sonra, başlatma geçişini veritabanına güncelleme için paket yöneticisi konsoluna update-database girin.

Göç başlatıldıktan sonra, veritabanını Code First Migration ile güncelledin:

Descrip{filter}tion sütununu Ürün tablosuna ekleyin ve uzunluğu 50'ye ayarlayın ([StringLength(50)]); Şimdi veritabanındaki değişiklikleri güncellemek için yeni bir göç ekleyin.

Paket Yöneticisi konsolunda şunları girin:Add-migration add_product_descrip{filter}tion, (add_product_descrip{filter}tion) göçü tanımlamak için Migrations klasörüne bir dosya ekler. Sonra, Paket Yöneticisi konsolunda şunu yazın:

güncelleme-veritabanı, yeni sütun Ürünler tablosuna eklenecektir.





Önceki:TCP port iletişim bağlantısı demosu
Önümüzdeki:asp.net mvc, dinamik veri yüklemek için RenderAction yerel görünümünü kullanır
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com