# Data Query और Save करना — .NET Core: वेब API बनाएँ, टेस्ट करें और शिप करें

Source: https://www.geekswithgeeks.com/hi/dotnet-core/ef-querying-saving

> 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` से स्पष्ट रूप से लोड होता है।

```csharp
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 करें।

**Quiz:** AsNoTracking() क्या करता है?

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

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