Modul 2 - Lekcija 2.1
Database-First vs Code-First pristup i konifgurisanje DbContext klase
📚 Nivo: Srednji | 🎯 Praktični primjeri: 4
Entity Framework je Microsoftov Object-Relational Mapping (ORM) alat. Omogućava rad sa bazom podataka koristeći klasične .NET objekte umjesto direktnog pisanja SQL upita.
Korisno kada se prilagođavate starim "legacy" sistemima koji već imaju kreiranu bazu, iz koje onda System automatski "iščupa" i kreira C# klase.
// Visual Studio Auto-Generated EDMX kod generiše DbContext:
public partial class StateStatisticsDBEntities : DbContext
{
public StateStatisticsDBEntities() : base("name=StateConnString") {}
public virtual DbSet<Department> Departments { get; set; }
}
Klase su auto-generisane. Ako napravite manuelnu promjenu unutar tih .cs fajlova biće prepisana prilikom idućeg generisanja iz Baze. Zbog ovoga obavezno koristiti partial classes za custom code u Database First pristupu.
Moderni standard razvoja. Prvo napišete C# klasu, a EF će u SQL-u sam kreirati Tabeu (ili ažurirati već postojeću preko migracija).
public class JavnaUpravaDbContext : DbContext
{
// Konstruktor čita "StateStatisticsDB" iz Web.config
public JavnaUpravaDbContext() : base("StateStatisticsDB") { }
public DbSet<Employee> Employees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>().ToTable("Employees", "Stats");
base.OnModelCreating(modelBuilder);
}
}
Ovo su C# klase koje označavaju jedinični oblik entiteta (red u tabeli).
[Table("Departments", Schema = "Stats")]
public class Department
{
[Key]
public int DepartmentID { get; set; }
[Required]
[StringLength(100)]
public string DepartmentName { get; set; }
// Navigation property - kolekcija zaposlenih (Lazy Loaded)
public virtual ICollection<Employee> Employees { get; set; }
}
Primijetite "Data Annotations" ukrase poput [Key] i [Required]. Oni
definišu dodatna pravila (Primary Key i NOT NULL).
Radite sa relacijama kroz kôd umjesto SQL Join-ova. EF se brine za vezanje Primary i Foreign ključeva preko tzv. Navigation Properties.
public class Department
{
//...
public virtual ICollection<Employee> Employees { get; set; }
}
public class Employee
{
//...
public int DepartmentID { get; set; }
public virtual Department Department { get; set; }
}
💡 Riječ virtual označava omogućavanje proxy klase za Lazy Loading
(Kada pristupite povezanoj instanci, EF pravi dodati manji upit ka SQL Serveru).
| Karakteristika | Entity Framework 6 | Entity Framework Core |
|---|---|---|
| Platforma | .NET Framework (Windows) | Cross-platform (.NET 5+) |
| Dizajner Baze (EDMX) | ✅ Podržano (Database-First Wizard) | ❌ Nije Podržano (Samo kod) |
| Performanse | Standardne | 🚀 Veoma brze i optimizovane |
| Prelazni Koncepti | DbContext, DbSet, LINQ | DbContext, DbSet, LINQ - Isto! |
U kratkim crtama:
virtual) definišu Relacije.U Lekciji 2.2 učimo o Migracijama - kako komandama prebaciti C# modele (Code-First) direktno na bazu i kako sigurno upravljati novim kolonama.