name: Entity Framework Skill description: Koristi se kad trebamo dodati izmjenu u EF model klasu, generirati novu migraciju ili dodati novi entitet u DbContext. Aktivira se na zahtjeve poput "dodaj novo polje u Event", "kreiraj novu tablicu", "dodaj migraciju".
Entity Framework Skill — Zagreb Events
Pomaže pri svakoj radnji vezanoj uz Entity Framework Core u Zagreb Events projektu.
Projekt struktura
lab3/
├── ZagrebEvents.Model/ ← Klase entiteta (Event, Venue, User...)
├── ZagrebEvents.DAL/ ← ZagrebEventsDbContext + Migrations/
└── ZagrebEvents.Web/ ← Controlleri, viewovi, appsettings.json
Connection string
Definiran u lab3/ZagrebEvents.Web/appsettings.json pod ključem ZagrebEventsDbContext.
Server: localhost\SQLEXPRESS, baza: ZagrebEvents, Windows auth.
Kad se dodaje novo polje u postojeći model
-
Dodaj property u model klasu (npr.
lab3/ZagrebEvents.Model/Event.cs):[MaxLength(50)] public string? Genre { get; set; } -
Pravila za anotacije:
- Primarni ključ:
[Key] public int Id - Strani ključ:
[ForeignKey(nameof(Venue))] public int VenueId - Navigacija:
public virtual Venue? Venue(svirtualza lazy loading) - 1-N kolekcija:
public virtual ICollection<Event> Events - Decimal za novac:
[Column(TypeName = "decimal(10,2)")] - Computed property:
[NotMapped]da EF ne pokuša mapirati u DB
- Primarni ključ:
-
Generiraj migraciju iz developer terminala:
cd lab3/ZagrebEvents.DAL dotnet ef migrations add NazivIzmjene --startup-project ../ZagrebEvents.Web --context ZagrebEventsDbContext -
Primijeni migraciju na bazu:
dotnet ef database update --startup-project ../ZagrebEvents.Web --context ZagrebEventsDbContext
Kad se dodaje nova tablica/entitet
-
Kreiraj novu klasu u
ZagrebEvents.Model/:using System.ComponentModel.DataAnnotations; namespace ZagrebEvents.Model { public class Tag { [Key] public int Id { get; set; } [Required, MaxLength(50)] public string Name { get; set; } = ""; public virtual ICollection<Event> Events { get; set; } = new List<Event>(); } } -
Dodaj
DbSet<T>uZagrebEventsDbContext.cs:public DbSet<Tag> Tags { get; set; } = null!; -
Ako postoji veza, konfiguriraj je u
OnModelCreating()ili kroz anotacije. -
Generiraj migraciju i update.
Seed podaci
Dodaju se u OnModelCreating() pomoću HasData():
modelBuilder.Entity<Tag>().HasData(
new Tag { Id = 1, Name = "Underground" },
new Tag { Id = 2, Name = "Mainstream" }
);
Važno: pri seedanju navigation properties se NE postavljaju, samo FK ID-jevi.
CRUD operacije u controllerima
// READ jedan
var ev = _db.Events
.Include(e => e.Venue)
.Include(e => e.Reviews).ThenInclude(r => r.User)
.FirstOrDefault(e => e.Id == id);
// READ više
var list = _db.Events.Where(e => e.IsUpcoming).ToList();
// CREATE
_db.Events.Add(newEvent);
_db.SaveChanges();
// UPDATE
var ev = _db.Events.Find(id);
ev.Name = "Novi naziv";
_db.SaveChanges();
// DELETE
_db.Events.Remove(ev);
_db.SaveChanges();
Česte greške
- Cascade delete cycle: kad više FK-jeva ima cascade, EF baca grešku. Riješiti s
OnDelete(DeleteBehavior.Restrict)uOnModelCreating. - N+1 queries: koristi
Include()iThenInclude()za eager loading. - Migracija ne radi: provjeri jel
--startup-projecttočno postavljen i da Web projekt imaMicrosoft.EntityFrameworkCore.Designpaket.
Što agent NE smije
- Ne smije ručno mijenjati datoteke u
Migrations/folderu (to je auto-generirano). - Ne smije postavljati
Idručno pri INSERT-u (ostavi EF da generira). - Ne smije koristiti
_db.Database.EnsureCreated()umjesto migracija.
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.