web-gelistirme-sc.com

Varlık-Çerçeve Geçişlerini Sıfırla

Geçişlerimi kapattım, ilk geçişde IgnoreChanges kullandım, ancak şimdi tüm geçişlerimi silmek ve tüm mantığı içeren ilk geçişle başlamak istiyorum.

Klasördeki geçişleri sildiğimde ve Add-Migration dosyasını denediğimde, tam bir dosya oluşturmuyor (boş - çünkü son dosyamdan beri hiçbir değişiklik yapmadım, ancak şimdi silindi, taşıma).

Herhangi bir Disable-Migrations command var, böylece Enable-Migrations dosyasını tekrar çalıştırabilir miyim?

278
Todd

Gerek :

  1. Durumu silin: Projenizdeki geçişler klasörünü silin; Ve
  2. Veritabanınızdaki __MigrationHistory tablosunu silin (sistem tablolarının altında olabilir); Sonra
  3. Paket Yöneticisi Konsolu'nda aşağıdaki komutu çalıştırın:

    Enable-Migrations -EnableAutomaticMigrations -Force
    

    -EnableAutomaticMigrations ile veya olmadan kullanın

  4. Sonunda koşabilirsin:

    Add-Migration Initial
    
416
Todd

Sorun: Geçişlerinizi tamamladınız ve mevcut tablolarınızı silmeden sıfırlamak istiyorsunuz.

Sorun: EF tabloları sıfırdan oluşturmak istediğinden, veritabanındaki mevcut tablolarla geçişleri sıfırlayamazsınız.

Ne yapalım:

  1. Migrations_History tablosundan varolan geçişleri silin.

  2. Migrations Klasöründen varolan geçişleri silin.

  3. Eklenti geçişi Sıfırla'yı çalıştırın. Bu, Migration klasörünüzde tabloları içeren bir geçiş yaratacaktır (ancak çalışmaz, böylece hata yapmaz.) 

  4. Artık MigrationHistory tablosunda ilk satırı oluşturmanız gerekir; böylece EF mevcut durumun bir anlık görüntüsüne sahip olur. Geçiş yaparsanız, EF bunu yapar. Ancak, az önce yaptığınız taşıma işlemlerini, veritabanında zaten mevcut olan tabloları uygulayamazsınız. Öyleyse Göç'e gidin ve "Yukarı" yönteminin içindeki tüm kodları yorumlayın.

  5. Şimdi güncelleme veritabanını çalıştır. Migration'ı (aslında veritabanını değiştirmezken) uygular ve MigrationHistory'de bir anlık görüntü satırı oluşturur.

Artık geçişlerinizi sıfırladınız ve normal geçişlere devam edebilirsiniz.

137
Greg Gum

Peki ya 

Update-Database –TargetMigration: $InitialDatabase

paket Yöneticisi Konsolunda? Tüm güncellemeleri çok erken durumuna sıfırlamalıdır.

Referans Bağlantı: Kod İlk Göç - Belli Bir Sürüme Geçmek (Düşüş dahil)

26
Chris Voon

Bunu düzeltmek için yapmanız gerekenler: 

  1. Migrations Klasöründeki tüm * .cs dosyalarını silin.

  2. Veritabanındaki _MigrationHistory Tabloyu Sil 

  3. Enable-Migrations -EnableAutomaticMigrations -Force komutunu çalıştır

  4. Add-Migration Reset komutunu çalıştır

Ardından, public partial class Reset : DbMigration sınıfında mevcut ve mevcut tüm Tabloları yorumlamanız gerekir:

public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}

Bu parçayı özlüyorsanız hepsi başarısız olacak ve yeniden başlamak zorundasınız!

  1. Şimdi Çalıştır Update-Database -verbose

Yukarıdakileri doğru bir şekilde yaptıysanız, bu başarılı olmalıdır ve şimdi normal şekilde devam edebilirsiniz.

14
Rusty Nail

EntityFramework 6'da lütfen deneyin:

Add-Migration Initial

i̇lk geçiş dosyasını güncellemek için.

2
Asaf

Sorunum Migrations klasörünü el ile kaldırmam olarak ortaya çıktı. Bunu yaptım çünkü içeriği yedeklemek istedim, bu yüzden klasörü projeden çıkardım. Sorunu daha sonra geri koyarak (bir yedek kopya yaptıktan sonra), ardından Migrations klasörünü Solutions Explorer'da sağ tıklatarak ve açılan menüden Sil'i seçerek düzelttim.

2
user1738579

Bu, .NET Core'da EF'i aradığımızda hala göründüğünü göz önüne alarak, cevabımı buraya yazacağım (Beni çok rahatsız ettiğinden beri). EF 6 .NET sürümünde bazı incelikler olduğunu unutmayın (İlk komut yok ve "Anlık Görüntü" dosyalarını silmeniz gerekecek)

(.NET Core 2.1'de test edilmiştir)

İşte adımlar:

  1. _efmigrationhistory tablosunu silin.
  2. Tüm çözümünüzü kendi adlarında Snapshot içeren, ApplicationDbContextSnapshot.cs ve delete gibi dosyaları arayın.
  3. Add-Migration InitialMigration komutunu çalıştır

Lütfen dikkat: TÜM Anlık Görüntü dosyalarını silmelisiniz. Sayısız saatimi sadece veritabanını silmekle harcadım ... Eğer yapmazsanız, bu boş bir geçiş yaratacaktır.

Ayrıca, # 3'te yalnızca istediğiniz şekilde göçünüzü adlandırabilirsiniz.

İşte size bazı ek kaynaklar: asp.net CORE Boş bırakılan göçler

Entity Framework 7 geçişlerini sıfırla

2
Jose A

Varlık Çerçeve Çekirdeğinde.

  1. Tüm dosyaları geçişler klasöründen kaldırın.
  2. Konsolda yaz

dotnet ef veritabanı bırak -f -v

dotnet ef migrasyonları İlk ekle

dotnet ef veritabanı güncellemesi

1
Liam Kernighan

EF6'da

  1. 'Göçler' klasöründeki tüm dosyalarınızı silin ... Ancak 'initial create' veya 'config' değil.
  2. Veritabanını sil.
  3. Şimdi Add-Migration Initial komutunu çalıştırın.
  4. Şimdi 'update-database' yapabilirsiniz ve her şey yoluna girecek.
1
adudley

Bu yöntem __MigrationHistory tablosunun silinmesini gerektirmez, bu nedenle ellerinizi konuşlandırma sırasında veritabanına koymak zorunda değilsiniz.

  1. Migrations klasöründen varolan geçişleri silin.
  2. Paket Yönetici Konsolu'nda Add-Migration ResetMigrations komutunu çalıştırın
  3. Up() yönteminde geçiş geçmişini temizleyin:
/// <summary>
/// Reset existing migrations by cleaning the __MigrationHistory table
/// and creating a new initial migration with the current model snapshot.
/// </summary>
public partial class ResetMigrations : DbMigration
{
    public override void Up()
    {
        Sql("DELETE FROM [dbo].[__MigrationHistory]");
    }

    public override void Down()
    {
    }
}
0
Olexander