Migration(Göç) Oluşturma
Migration(Göç) veri tabanı yapısındaki değişklikleri tutmaya yarar. Böylece veri tabanı üzerinde geriye dönüç(roll back) veya aynı yapıya sahip ikinci bir veri tabanı yapmak mümkündür. Böylece değişen her kolon'u takip edebilmek mümkündür.
Kaynak(Context) ve veri tabanı şu anda senkronize olmadığından yeni bir Göç oluşturarak veri tabanını güncellememiz gerekmektedir. Bunu Items
alanı için yapacağız.
dotnet ef migrations add AddItems
Bu Kaynak ta yaptığınız değişiklikleri inceleyerek AddItems
adında yeni bir Göç oluşturur
Eğer şöyle bir hata alıyorsanız :
No executable found matching command "dotnet-ef"
Doğru klasörde olduğunuza emin olun. Bu komutlar ana klasörden çalıştırılmalıdır. Ana klasörProgram.cs
nin bulunduğu klasördür.
Eğer Data/Migration
klasörünü açarsanız, bir kaç dosya göreceksiniz.
Bizim için ilk oluşturulan göç dosyası 00_CreateIdentitySchema.cs
adı ile oluşturulmuş ve veri tabanı bu şekilde güncellenmiştir. AddItems
dosyasının önüne timestamp
eklenmiş ve bu şekilde göç dosyası oluşturulmuştur.
Tavsiye: Göç listesini
dotnet ef migrations list
ile görebilirsiniz.
**Göç dosyasını açtığınızda Up
ve Down
adında iki metod göreceksiniz.
Data/Migrations/<date>_AddItems.cs
protected override void Up(MigrationBuilder migrationBuilder)
{
// (... some code)
migrationBuilder.CreateTable(
name: "Items",
columns: table => new
{
Id = table.Column<Guid>(type: "BLOB", nullable: false),
DueAt = table.Column<DateTimeOffset>(type: "TEXT", nullable: true),
IsDone = table.Column<bool>(type: "INTEGER", nullable: false),
Title = table.Column<string>(type: "TEXT", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Items", x => x.Id);
});
// (some code...)
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// (... some code)
migrationBuilder.DropTable(
name: "Items");
// (some code...)
}
Up
metodu Göçü çalıştırdığımızda veri tabanına etki edecek metoddur. Kaynağa DbSet<TodoItem>
eklediğinizden dolayı Entity Framework Core Items
adında bir tablo oluşturacak ve TodoItem
modelinde bulunan alanlara uyacak kolonlar oluşturacaktır.
Down
metodu ise tersini yapar. Göç geri alındığında Items
tablosunu siler.
SQLite Sınırlılığına Geçici Çözüm
Projede SQLite kullanmanın bazı sınırlılıkları var. Bu sınırlılıklar düzelene kadar şu şekilde geçici bir çözüm yolu kullanabilirsiniz.
Up
metodundakimigrationBuilder.AddForeignKey
satırlarını yorum olarak değiştirin. (//
kullanabilirsiniz.)Down
metodundakimigrationBuilder.DropForeignKey
satırlarını yorum olarak değiştirin.
Eğer MySQL veya SQL Server gibi tam teşekküllü bir SQL veri tabanı kullanıyor olsaydınız böyle bir değişikliğe ihtiyacınız olmayacaktı. Göç dosyasını çalıştırdığınızda hiç bir sorun almayacaktınız.
Göçü uygulayın
Göçü oluşturduktan sonraki son basamak uygulanmasıdır :
dotnet ef database update
Yukarıdaki komut Entity Framework Core'un Items
adında bir tablo oluşturmasına neden olacaktır.
Eğer bu güncellemeyi geri almak istiyorsanız. Daha önceki bir göç ismini vererek bu işlemi gerçekleştirebilirsiniz.
dotnet ef database update CreateIdentitySchema
Bu komutCreateIdentitySchema
dan sonra oluşturulmuş tüm *göçlerinDown
metodunu çalıştıracaktır.Eğer veri tabanını tamamen silmek istiyorsanız.
dotnet ef database drop
kullanabilirsiniz. Ardındandotnet ef database update
yazdığınızda son Göç e kadar tüm göçler çalıştırılır.
Şu anda veri tabanı ayağını tamamlamış durumdayız. Sonraki adımımız bu kaynağı servis içinde kullanmak.