Uvod u Entity Framework 6

Modul 2 - Lekcija 2.1

Database-First vs Code-First pristup i konifgurisanje DbContext klase

📚 Nivo: Srednji | 🎯 Praktični primjeri: 4

📖 Šta je Entity Framework (EF)?

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.

🔑 Prednosti:

  • Manje koda i grešaka (Type Safety - ranije hvatanje SQL grešaka).
  • Automatsko generisanje (i promjena strukture) baze - Migracije.
  • IntelliSense - autocompletion kod pisanja upita.
  • LINQ - "C#" način kreiranja upita (Select, Where, itd).
📖 Pogledaj Detaljno Objašnjenje →

🏗️ Arhitektura Entity Framework-a

Slojevi Komunikacije:

  • Conceptual Model: Naše C# klase/Objekti.
  • Mapping: Kako se klase vežu za Tabele.
  • Storage Model: Fizička baza.
  • ADO.NET: LINQ to SQL prevodilac.
📖 Pogledaj Detaljno Objašnjenje →
EF Architecture

🔄 Pristupi: Database-First

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; }
                    }

⚠️ VAŽNO - Database First pravila:

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.

📖 Pogledaj Detaljno Objašnjenje →

🔄 Pristupi: Code-First

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);
                    }
                    }
📖 Pogledaj Detaljno Objašnjenje →

🏛️ Model Klase

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).

📖 Pogledaj Detaljno Objašnjenje →

🔗 Relacije i "Navigation Properties"

Radite sa relacijama kroz kôd umjesto SQL Join-ova. EF se brine za vezanje Primary i Foreign ključeva preko tzv. Navigation Properties.

Parent (Department)

public class Department 
{
    //...
    public virtual ICollection<Employee> Employees { get; set; }
}

Child (Employee)

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).

📖 Pogledaj Detaljno Objašnjenje →

⚖️ EF6 vs EF Core

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!
📖 Pogledaj Detaljno Objašnjenje →

✅ Zaključak

U kratkim crtama:

  • ✅ EF prebacuje rad sa bazom iz SQL komandi u tipizovane C# komande.
  • ✅ "Database-First" vuče modele iz baze, dok kod "Code-First" kod gradi bazu.
  • ✅ DbContext je centralna "session" klasa. DbSet je jedna tabela unutar tog konteksta.
  • ✅ Navigation properties (sa virtual) definišu Relacije.
  • ✅ Koncept iz EF6 je 80% identičan i prenosiv na EF Core arhitekture.

📚 Sljedeća Lekcija

U Lekciji 2.2 učimo o Migracijama - kako komandama prebaciti C# modele (Code-First) direktno na bazu i kako sigurno upravljati novim kolonama.