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

Source: https://www.geekswithgeeks.com/hi/dotnet-core/ef-model-dbcontext

> Entity, DbContext परिभाषित करें और connection string के साथ register करें।

## DbContext

EF Core एक object-relational mapper है। `DbContext` database के साथ एक session दर्शाता है, और हर `DbSet<T>` property एक table। वह आपके बदलाव ट्रैक करता है और `SaveChanges` पर लिखता है।

## कोड से database तक

Entity classes tables से map होती हैं, migrations schema बदलती हैं, और LINQ queries SQL बन जाती हैं।

![मॉडल से stored rows तक चार चरण।](assets/figures/dotnet-core/section-6-map.svg) — चित्र 6.1 — Model, migration, database, query।

## एक छोटा मॉडल

उदाहरण को सरल रखने के लिए SQLite है; provider package बदलकर यही कोड SQL Server या PostgreSQL के साथ भी चलता है।

```csharp
public class Book
{
    public int Id { get; set; }
    public required string Title { get; set; }
    public decimal Price { get; set; }
}

public class ShopDb(DbContextOptions<ShopDb> options) : DbContext(options)
{
    public DbSet<Book> Books => Set<Book>();
}

// Program.cs
builder.Services.AddDbContext<ShopDb>(o =>
    o.UseSqlite(builder.Configuration.GetConnectionString("Default")));
```

## DbContext को scoped रखें

`AddDbContext` उसे scoped register करता है, और यही सही है: वह thread-safe नहीं है, इसलिए एक instance को समवर्ती requests में साझा न करें।

**Quiz:** DbSet<Book> property आम तौर पर क्या दर्शाती है?

- [ ] Database server
- [x] Books की table
- [ ] Migration फ़ाइल
- [ ] Connection string

*Answer:* Books की table. हर `DbSet<T>` एक table (या view) से map होता है जिसमें entity type की rows होती हैं।
