पाठ 20 / 26

Data Query और Save करना

LINQ से पढ़ें, N+1 समस्या से बचें और SaveChangesAsync से बदलाव लिखें।

LINQ बनता है SQL

EF Core Where और Select को SQL में बदलता है, इसलिए filtering database में होती है। Read-only queries में AsNoTracking() से change tracking छोड़ें, और web apps में हमेशा Async methods उपयोग करें।

CRUD endpoints

बिना tracking के सस्ती किताबें पढ़ें, और एक किताब जोड़कर एक बार save करें। संबंधित डेटा Include से स्पष्ट रूप से लोड होता है।

app.MapGet("/books", async (ShopDb db) =>
    await db.Books.AsNoTracking()
        .Where(b => b.Price < 500)
        .OrderBy(b => b.Title)
        .ToListAsync());

app.MapPost("/books", async (Book b, ShopDb db) =>
{
    db.Books.Add(b);
    await db.SaveChangesAsync();
    return Results.Created($"/books/{b.Id}", b);
});

N+1 का जाल

Orders पर loop चलाकर हर order के items छूने से हर order पर एक query चल सकती है। संबंधित rows Include से एक ही query में लोड करें, या Select से DTO में project करें। इसे जल्दी पकड़ने के लिए development में SQL log करें।

त्वरित जाँच: AsNoTracking() क्या करता है?

  • Rows हटाता है
  • Query encrypt करता है
  • Table की caching बंद करता है
  • तेज़ read-only query के लिए change tracking छोड़ देता है
Answer

तेज़ read-only query के लिए change tracking छोड़ देता है — लौटे entities ट्रैक नहीं होते, जिससे अगर आप उन्हें update नहीं करेंगे तो memory और समय बचता है।