Modul 2 - Lekcija 2.2
Enable-Migrations, Add-Migration, Update-Database
📚 Nivo: Srednji | 🎯 Praktični primjeri: 3
Entity Framework Migracije omogućavaju vam da upravljate promjenama u strukturi baze (kreiranje tabela, kolona, ključeva) direktno kroz C# kod.
CREATE/ALTER TABLE SQL skripti.EF sam pamti šta je izvršeno, a šta nije. Kada se desi Update-Database, on kreira
sistemsku tabelu.
Sve migracije se pokreću iz Package Manager Console prozora unutar Visual Studio-a.
Enable-MigrationsIzvršava se samo jednom po cijelom projektu. Kreira Migrations
folder i Configuration.cs fajl.
Add-Migration ImeMigracijeNakon što ste dodali polje (npr. JMBG) u model klasu, zovete ovu komandu. EF stvara
C# fajl sa Up() i Down() instrukcijama. Ovo NE mijenja bazu
još uvek!
Update-DatabasePrimjenjuje (Apply) neprimjenjenje migracije direktno na bazu. Prevođenje C# koda u
ALTER TABLE i slanje na SQL Server.
Nakon Add-Migration InitialCreate, dobijete ovako nešto:
public partial class InitialCreate : DbMigration
{
public override void Up()
{
// Up() se pokreće kod Update-Database
CreateTable(
"dbo.Departments",
c => new {
DepartmentID = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false, maxLength: 50)
})
.PrimaryKey(t => t.DepartmentID);
}
public override void Down()
{
// Down() se pokreće kod Rollback-a (undo opcija)
DropTable("dbo.Departments");
}
}
Šta ako ste greškom obrisali neku kolonu ili kreirali pogrešnu relaciju?
# TargetMigration parametar prima ime migracije na koju želite da se vratite
PM> Update-Database -TargetMigration InitialCreate
# Vrati sve na praznu bazu:
PM> Update-Database -TargetMigration $InitialDatabase
Ako radite Rollback migracije koja dodaje novu Tabelu, taj rollback (izvršavanjem
DropTable u svojoj Down() metodi) briše sve podatke u toj
tabeli! Nikad na produkciji!
Ukoliko preuzmete kod (Git Pull) gdje je kolega napravio migraciju, a vi imate svoju netestiranu:
-TargetMigration.
.cs migracijski fajl.
Update-Database da preuzmete promjene koje je napravio vaš kolega.Add-Migration "MojaPromjena" -Force da stvorite novu migraciju
koja prati najnovije stanje (onoliko promjena koliko vas razlikuje do aktuelne).U praksi: Razgovarajte o promjenama baze prije nego ih gurnete u Git. Baza mora biti dogovorena!
Koristite Configuration.cs (metoda Seed()) da ubacite šifarnike, admine
itd.
protected override void Seed(JavnaUpravaDbContext context)
{
// AddOrUpdate automatski prepoznaje duplikate na bazi Name i vrsi samo Update!
context.Departments.AddOrUpdate(
d => d.DepartmentCode,
new Department { DepartmentName = "Ministarstvo Finansija", DepartmentCode = "MF" },
new Department { DepartmentName = "Ministarstvo Zdravlja", DepartmentCode = "MZ" }
);
}
Seed metoda se izvršava svaki put kad pokrenete Update-Database,
zbog toga isključivo koristite metodu AddOrUpdate koja spriječava dupliranje unosa.
Enable-Migrations - Prvi i osnovni korak.Add-Migration [Ime] - Očitavanje promjena Modela i pravljenje
Up/Down plana.
Update-Database - Prevođenje u SQL i udar na fizičku Bazu podataka.Seed() se koristi za "sigurno" učitavanje sistemskih početnih podataka /
administratora.U Lekciji 2.3 radimo osnovne CRUD operacije nad podacima: Dodavanje (Add), Brisanje (Remove), Izmjena (Save) i učenje o specifičnostima Lazy vs Eager Loading-a !