Šta je Entity Framework?

Entity Framework (EF) je ORM (Object-Relational Mapper) alat koji omogućava rad sa bazom podataka koristeći C# klase umesto direktnog pisanja SQL upita. Razvijen je od strane Microsoft i deo je .NET ekosistema.

U modernim projektima koristi se Entity Framework Core, koji radi sa:

  • ASP.NET Core

  • konzolnim aplikacijama

  • Blazor aplikacijama

  • Windows servisima

  • desktop aplikacijama


Zašto koristiti Entity Framework?

Bez ORM-a, rad sa bazom izgleda ovako:

  • Otvaraš konekciju

  • Pišeš SQL

  • Mapiraš rezultate u objekte

  • Zatvaraš konekciju

  • Brineš o SQL injection zaštiti

Sa EF-om:

var products = context.Products
.Where(p => p.Price > 1000)
.OrderBy(p => p.Name)
.ToList();

EF automatski:

  • Pretvara LINQ u SQL

  • Izvršava upit

  • Mapira podatke u objekte

  • Upravljа konekcijom


Osnovni koncepti

1️⃣ DbContext

DbContext je centralna klasa za komunikaciju sa bazom.

public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}

2️⃣ Entiteti (Modeli)

Klase predstavljaju tabele u bazi.

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}

3️⃣ DbSet

DbSet<T> predstavlja tabelu u bazi.

context.Products.Add(new Product { Name = "Laptop", Price = 1200 });
context.SaveChanges();

Pristupi u EF-u

Code First

Bazu generišeš iz C# modela.

✔ Najčešće korišćen pristup
✔ Idealno za nove projekte

Database First

Modeli se generišu iz postojeće baze.

✔ Koristi se u legacy sistemima

Model First (retko danas)


Migracije

Migracije omogućavaju verzionisanje baze.

Komande:

Add-Migration InitialCreate
Update-Database

EF kreira SQL skriptu i ažurira bazu.


LINQ i EF

Jedna od najvećih prednosti EF-a je integracija sa LINQ-om.

var expensiveProducts = context.Products
.Where(p => p.Price > 5000)
.Select(p => new { p.Name, p.Price })
.ToList();

EF prevodi LINQ u SQL upit.


Relacije

One-to-Many

public class Order
{
public int Id { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}

Many-to-Many

Automatski podržano u EF Core.


Lazy vs Eager Loading

Eager Loading

var orders = context.Orders
.Include(o => o.Customer)
.ToList();

Lazy Loading

Podaci se učitavaju tek kada im pristupiš.


Performanse

Važne optimizacije:

1️⃣ AsNoTracking()

Za read-only podatke:

var products = context.Products
.AsNoTracking()
.ToList();

2️⃣ Select projekcija

Ne učitavaj celu tabelu ako ti treba samo par kolona.

3️⃣ Indeksi u bazi

EF ne rešava loš dizajn baze.


Prednosti EF-a

✔ Brži razvoj
✔ Manje SQL koda
✔ Integracija sa LINQ
✔ Migracije
✔ Cross-platform podrška


Mane EF-a

❌ Kompleksni upiti mogu biti sporiji
❌ Potrebno razumevanje kako EF generiše SQL
❌ Debugovanje generisanog SQL-a može biti zahtevno


Kada koristiti EF?

EF je odličan za:

  • Enterprise aplikacije

  • Finansijske sisteme

  • CRM / ERP sisteme

  • Web API projekte

Nije idealan za:

  • Sisteme sa ekstremnim performansama (npr. high-frequency trading)

  • Aplikacije gde je SQL jako specifičan i optimizovan ručno


EF vs Dapper

Dapper je micro ORM:

  • Brži

  • Manje apstrakcije

  • Ručno pišeš SQL

EF:

  • Više automatizacije

  • Sporiji od Dapper-a

  • Mnogo produktivniji za velike projekte


Zaključak

Entity Framework Core je moćan alat za rad sa bazom u C# projektima. Omogućava objektno orijentisan pristup podacima, integraciju sa LINQ-om i jednostavno upravljanje migracijama.

Ako radiš C# backend, posebno sa ASP.NET Core, EF Core je gotovo standard.

Facebook Comments

Leave a Reply