CRUD-toiminnot EF Corella
Suorittakaa Create-, Read-, Update- ja Delete-toimintoja EF Coren muutosseurannan ja SaveChangesin avulla.
CRUD-toiminnot EF Corella on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.
EF Coren CRUD-toimintojen yleiskatsaus
EF Core käsittelee kaikki neljä CRUD-toimintoa — luomisen, lukemisen, päivittämisen ja poistamisen — muutosten seurannan ja SaveChangesAsync()-metodin yhdistelmällä. Muutosten seurannan ymmärtäminen on avain CRUD-toimintojen hallintaan.
Luominen: uuden entiteetin lisääminen
Käyttäkää DbSet.Add()- tai AddAsync()-metodia merkitäksenne entiteetin Added-tilaan. Kun kutsutte SaveChangesAsync()-metodia, EF Core muodostaa INSERT-lauseen ja täyttää automaattisesti kasvavan avaimen.
var order = new Order
{
CustomerId = 5,
PlacedAt = DateTime.UtcNow,
Status = OrderStatus.Pending
};
await _db.Orders.AddAsync(order);
await _db.SaveChangesAsync();
Console.WriteLine(order.Id); // populated by DBEntiteettikaavion lisääminen
Kun lisäätte pääentiteetin alientiteetteineen yhdellä kutsulla, koko oliohierarkia lisätään. EF Core määrittää vierasavainten suhteet automaattisesti.
var order = new Order
{
CustomerId = 5,
PlacedAt = DateTime.UtcNow,
Lines = new List<OrderLine>
{
new() { ProductId = 10, Quantity = 2, Price = 49.99m },
new() { ProductId = 11, Quantity = 1, Price = 19.99m }
}
};
_db.Orders.Add(order);
await _db.SaveChangesAsync();
// Inserts Order + 2 OrderLines in one transactionLukeminen: kyselyt LINQilla
EF Core muuntaa LINQ-lausekkeet SQL:ksi. Koostakaa kyselyitä Where-, Select-, OrderBy- ja muilla operaattoreilla ja muodostakaa tulokset sitten ToListAsync- tai FirstOrDefaultAsync-metodilla.
// Read all pending orders for a customer
var orders = await _db.Orders
.Where(o => o.CustomerId == 5 && o.Status == OrderStatus.Pending)
.OrderByDescending(o => o.PlacedAt)
.Select(o => new OrderSummaryDto
{
Id = o.Id,
Total = o.Lines.Sum(l => l.Quantity * l.Price),
Status = o.Status.ToString()
})
.ToListAsync();Lukeminen: yksittäisten entiteettien haut
Kun luette yksittäisen entiteetin, käyttäkää FindAsync-metodia (tarkistaa ensin muutosten seurannan) tai FirstOrDefaultAsync- ja SingleOrDefaultAsync-metodia predikaatin kanssa.
// By PK (checks cache first)
var order = await _db.Orders.FindAsync(orderId);
// By predicate (always hits DB)
var latest = await _db.Orders
.Where(o => o.CustomerId == 5)
.OrderByDescending(o => o.PlacedAt)
.FirstOrDefaultAsync();Päivittäminen: muutosten seuranta
EF Coren kautta ladatut entiteetit ovat seurannassa. Muokatkaa ominaisuuksia suoraan ja kutsukaa SaveChangesAsync()-metodia. EF Core havaitsee erot ja muodostaa mahdollisimman suppean UPDATE-lauseen.
var order = await _db.Orders.FindAsync(orderId);
if (order is null) return;
order.Status = OrderStatus.Shipped;
order.ShippedAt = DateTime.UtcNow;
await _db.SaveChangesAsync();
// UPDATE Orders SET Status=..., ShippedAt=... WHERE Id=orderIdPäivittäminen: joukkopäivitys (EF Core 7+)
ExecuteUpdateAsync päivittää rivit suoraan tietokannassa ilman entiteettien lataamista. Se on huomattavasti tehokkaampi joukkotoiminnoissa.
// Mark all overdue orders as Cancelled — no loading needed
await _db.Orders
.Where(o => o.Status == OrderStatus.Pending
&& o.PlacedAt < DateTime.UtcNow.AddDays(-30))
.ExecuteUpdateAsync(set => set
.SetProperty(o => o.Status, OrderStatus.Cancelled)
.SetProperty(o => o.UpdatedAt, DateTime.UtcNow));Poistaminen: yksittäisen entiteetin poistaminen
Kutsukaa seuratulle entiteetille Remove()-metodia ja sitten SaveChangesAsync()-metodia. Jos käytettävissänne on vain tunnus, hakekaa entiteetti ensin tai käyttäkää ExecuteDeleteAsync-metodia.
var order = await _db.Orders.FindAsync(orderId);
if (order is null) return;
_db.Orders.Remove(order);
await _db.SaveChangesAsync();
// DELETE FROM Orders WHERE Id=orderIdPoistaminen: joukkopoisto (EF Core 7+)
ExecuteDeleteAsync suorittaa yhden DELETE-SQL-lauseen ilman entiteettien lataamista — se sopii erinomaisesti eräsiivoustoimintoihin.
// Delete all cancelled orders older than 1 year
int deleted = await _db.Orders
.Where(o => o.Status == OrderStatus.Cancelled
&& o.PlacedAt < DateTime.UtcNow.AddYears(-1))
.ExecuteDeleteAsync();
Console.WriteLine($"Deleted {deleted} old orders");Transaktiot
Kaikki yhden SaveChangesAsync-kutsun sisältämät toiminnot suoritetaan transaktion sisällä. Käyttäkää erillistä transaktiota monivaiheisiin toimintoihin, jotka sisältävät useita tallennuksia.
using var transaction = await _db.Database.BeginTransactionAsync();
try
{
_db.Orders.Add(newOrder);
await _db.SaveChangesAsync();
inventory.Stock -= newOrder.Quantity;
await _db.SaveChangesAsync();
await transaction.CommitAsync();
}
catch
{
await transaction.RollbackAsync();
throw;
}Käytännössä: täydellinen CRUD-palvelu
Täydellinen palvelu kapseloi kaikki CRUD-toiminnot asianmukaisella virheenkäsittelyllä ja palauttaa DTO-olioita, jotta entiteettien sisäiset yksityiskohdat eivät paljastu.
public async Task<OrderDto> CreateOrderAsync(CreateOrderRequest req)
{
var order = new Order { CustomerId = req.CustomerId, PlacedAt = DateTime.UtcNow };
_db.Orders.Add(order);
await _db.SaveChangesAsync();
return new OrderDto { Id = order.Id, Status = order.Status.ToString() };
}
public async Task<bool> CancelOrderAsync(int id)
{
int rows = await _db.Orders
.Where(o => o.Id == id && o.Status == OrderStatus.Pending)
.ExecuteUpdateAsync(s =>
s.SetProperty(o => o.Status, OrderStatus.Cancelled));
return rows > 0;
}Pikatarkistus
Mikä etu ExecuteUpdateAsync- ja ExecuteDeleteAsync-metodeilla on verrattuna entiteettien lataamiseen ja SaveChangesAsync-metodin kutsumiseen?
Kertaus: CRUD-toiminnot EF Corella
Keskeiset opit:
- Add + SaveChangesAsync → INSERT; EF Core täyttää automaattisesti luodut avaimet
- Seurattujen entiteettien muokkaus + SaveChangesAsync → mahdollisimman suppea UPDATE
- Remove + SaveChangesAsync → DELETE yksittäisille entiteeteille
- ExecuteUpdateAsync / ExecuteDeleteAsync → joukkotoiminnot ilman lataamista (EF Core 7+)
- Koostakaa monivaiheiset toiminnot erillisen transaktion sisään atomisuuden varmistamiseksi
Opi C# tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 93
- Oppitunnit
- 346
Usein kysytyt kysymykset
Onko oppitunti ”CRUD-toiminnot EF Corella” ilmainen?
Kyllä – oppitunnin ”CRUD-toiminnot EF Corella” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”CRUD-toiminnot EF Corella”?
Suorittakaa Create-, Read-, Update- ja Delete-toimintoja EF Coren muutosseurannan ja SaveChangesin avulla. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”CRUD-toiminnot EF Corella”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?
Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- DbContextin ja DbSetin perusteet
- Migraatiot ja skeeman hallinta
- CRUD-toiminnot EF Corella
- Suhteet: yksi moneen ja moni moneen