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.csnin 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 listile 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.
UpmetodundakimigrationBuilder.AddForeignKeysatırlarını yorum olarak değiştirin. (//kullanabilirsiniz.)DownmetodundakimigrationBuilder.DropForeignKeysatı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 CreateIdentitySchemaBu komutCreateIdentitySchemadan sonra oluşturulmuş tüm *göçlerinDownmetodunu çalıştıracaktır.Eğer veri tabanını tamamen silmek istiyorsanız.
dotnet ef database dropkullanabilirsiniz. Ardındandotnet ef database updateyazdığı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.