ุจุนุฏ ู…ุง ุนู…ู„ู†ุง ุงู„ู€ Entities (ุฒูŠ ุงู„ู€ Employee class)ุŒ ุงู„ุฎุทูˆุฉ ุงู„ุฌุงูŠุฉ ุฅู†ู†ุง ู†ุนู…ู„ ุงู„ู€ Class ุงู„ู„ูŠ ู‡ูŠุฑุจุท ุจูŠู† ุงู„ุฃุจู„ูƒูŠุดู† ุจุชุงุนู†ุง ูˆุงู„ู€ Database. ุงู„ู€ Class ุฏู‡ ู‡ูˆ ุงู„ู€ DbContext.

ูŠุนู†ูŠ ุฅูŠู‡ Understanding DbContext in Entity Framework CoreุŸ

ุงู„ู€ Understanding DbContext in Entity Framework Core ุฏู‡ ู‡ูˆ ุญู„ู‚ุฉ ุงู„ูˆุตู„ ุงู„ุฃุณุงุณูŠุฉ ุจูŠู† ุงู„ูƒูˆุฏ ุจุชุงุนูƒ ูˆุงู„ู€ Database ููŠ ุงู„ู€ Entity Framework Core (ุฃูˆ EF Core).

  • ู…ุณุฆูˆู„ูŠุชู‡ ุฅูŠู‡ุŸ ู‡ูˆ ุงู„ู€ class ุงู„ู„ูŠ ู…ู† ุฎู„ุงู„ู‡ ุจุชู‚ุฏุฑ ุชุนู…ู„ ูƒู„ ุนู…ู„ูŠุงุช ุงู„ู€ Database ุฒูŠ:
    • ุชูุชุญ ูˆุชู‚ูู„ ุงู„ู€ connection.
    • ุชุนู…ู„ query ู„ู„ู€ data (ุชุฌูŠุจ ุจูŠุงู†ุงุช).
    • ุชุนู…ู„ save ู„ู„ุชุบูŠูŠุฑุงุช (ุชุถูŠูุŒ ุชุนุฏู„ุŒ ุชู…ุณุญ ุจูŠุงู†ุงุช).
  • ุฃูƒุชุฑ ู…ู† DatabaseุŸ ุฃู‡ ุนุงุฏูŠ ุฌุฏู‹ุง. ู…ู…ูƒู† ุงู„ุฃุจู„ูƒูŠุดู† ุจุชุงุนูƒ ูŠูƒูˆู† ููŠู‡ ุฃูƒุชุฑ ู…ู† DbContextุŒ ูˆูƒู„ ูˆุงุญุฏ ููŠู‡ู… ู…ู…ูƒู† ูŠุฑุจุท ุนู„ู‰ Database ู…ุฎุชู„ูุฉุŒ ุฃูˆ ุญุชู‰ ู†ูุณ ุงู„ู€ Database ุจุณ ุจุฅุนุฏุงุฏุงุช (configuration) ู…ุฎุชู„ูุฉ ู„ูˆ ู…ุญุชุงุฌ.
  • ู†ู†ุธู…ู‡ ุฅุฒุงูŠุŸ ุฒูŠ ู…ุง ุนู…ู„ู†ุง folder ู„ู„ู€ ModelsุŒ ูƒูˆูŠุณ ุจุฑุถู‡ ู†ุนู…ู„ folder ู„ู„ู€ DbContext ูˆู†ุณู…ูŠู‡ ู…ุซู„ู‹ุง Contexts ุฃูˆ DataAccess.
  • ุงู„ุชุณู…ูŠุฉ: ุงู„ู…ุชุนุงุฑู ุนู„ูŠู‡ ุจูŠู† ุงู„ู…ุจุฑู…ุฌูŠู† ุฅู†ู†ุง ุจู†ุถูŠู ูƒู„ู…ุฉ DbContext ููŠ ุขุฎุฑ ุงุณู… ุงู„ูƒู„ุงุณ ุฏู‡ุŒ ุนุดุงู† ูŠุจู‚ู‰ ูˆุงุถุญ ุฏูˆุฑู‡. ุฒูŠ ู…ุซู„ู‹ุง CompanyDbContext ุฃูˆ ApplicationDbContext.

ุฅุฒุงูŠ ู†ุนู…ู„ DbContextุŸ

ุชุนุงู„ู‰ ู†ุนู…ู„ ุงู„ู€ DbContext ุจุชุงุนู†ุง ูˆู†ุณู…ูŠู‡ CompanyDbContext.

// Put this class inside the created folder (e.g., Contexts)
using Microsoft.EntityFrameworkCore; // Add this using directive
 
// 1. Inherit from DbContext base class
internal class CompanyDbContext : DbContext
{
    // 2. Override the OnConfiguring method
    // Responsible for configuring DB connection (e.g., Connection String)
	protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
	{
        // Configure the database provider (SQL Server) and connection string
		// Use UseSqlServer for SQL Server
 
        // Use modern connection string format
        // Use UseSqlServer extension method which requires Microsoft.EntityFrameworkCore.SqlServer package
		optionsBuilder.UseSqlServer("Server=.;Database=Company;Trusted_Connection=True;Encrypt=False");
        // Note: Added Encrypt=False for local dev/simpler setup; review for production. Important for newer SQL Server driver versions.
 
        // Old connection string format (still works)
		// optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=Company;Integrated Security=True");
 
        // Can use lambda expression for brevity if it's a single line
        // protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        //  => optionsBuilder.UseSqlServer("Server=.;Database=Company;Trusted_Connection=True;Encrypt=False");
	}
 
    // 3. Next step: Add DbSets for our models here
    // public DbSet<Employee> Employees { get; set; } // To be added later
}

ุดุฑุญ ุงู„ุฎุทูˆุงุช:

  1. ุงู„ูˆุฑุงุซุฉ (Inheritance): ุฃู‡ู… ุญุงุฌุฉ ุฅู† ุงู„ูƒู„ุงุณ ุจุชุงุนู†ุง (CompanyDbContext) ู„ุงุฒู… ูŠูˆุฑุซ ู…ู† ุงู„ูƒู„ุงุณ ุงู„ุฃุณุงุณูŠ ุงู„ู„ูŠ ุงุณู…ู‡ DbContext. ุงู„ูƒู„ุงุณ ุฏู‡ ู…ูˆุฌูˆุฏ ุฌูˆู‡ ุงู„ู€ namespace ุงู„ู„ูŠ ุงุณู…ู‡ Microsoft.EntityFrameworkCore (ู„ุงุฒู… ุชุนู…ู„ ู„ู‡ using).
  2. ุงู„ู€ OnConfiguring Method:
    • ุฏูŠ method ู…ูˆุฌูˆุฏุฉ ุฃุตู„ู‹ุง ููŠ ุงู„ู€ DbContext ุงู„ุฃุจุŒ ูˆุฅุญู†ุง ุจู†ุนู…ู„ู‡ุง override ุนุดุงู† ู†ุญุท ุงู„ุฅุนุฏุงุฏุงุช ุงู„ุฎุงุตุฉ ุจุชุงุนุชู†ุง.
    • ูˆุธูŠูุชู‡ุง ุงู„ุฃุณุงุณูŠุฉ ุฅู†ู†ุง ู†ุญุฏุฏ ู„ู„ู€ EF Core ุฅุฒุงูŠ ูŠูˆุตู„ ู„ู„ู€ Database. ุฏู‡ ุจูŠุญุตู„ ุนู† ุทุฑูŠู‚ ุงู„ู€ optionsBuilder ุงู„ู„ูŠ ุจูŠุฌูŠู„ู†ุง ูƒู€ parameter.
    • ุจู†ุณุชุฎุฏู… optionsBuilder.UseSqlServer(...) (ุฃูˆ UseMySql, UseNpgsql, etc. ุญุณุจ ู†ูˆุน ุงู„ู€ Database) ุนุดุงู† ู†ู‚ูˆู„ู‡ ุฅู†ู†ุง ู‡ู†ุณุชุฎุฏู… ุงู„ู†ูˆุน ุฏู‡ ู…ู† ุงู„ู€ Databases. ุงู„ู€ UseSqlServer ุฏูŠ ุนุจุงุฑุฉ ุนู† extension method ุจุชูŠุฌูŠ ู…ู† ุงู„ู€ package ุงู„ู„ูŠ ู‡ู†ุฒู„ู‡ุง ูƒู…ุงู† ุดูˆูŠุฉ.
    • ุฌูˆู‡ ุงู„ู€ UseSqlServer ุจู†ุญุท ุฃู‡ู… ุญุงุฌุฉ: ุงู„ู€ Connection String.

ุงู„ู€ NuGet Package ุงู„ู…ุทู„ูˆุจุฉ

ุงู„ูƒู„ุงุณ DbContext ูˆุงู„ู€ method ุงู„ู„ูŠ ุงุณู…ู‡ุง UseSqlServer ู…ุด ู…ูˆุฌูˆุฏูŠู† ููŠ ุงู„ู€ .NET ูƒุฏู‡ ู„ูˆุญุฏู‡ู…. ู„ุงุฒู… ู†ู†ุฒู„ package ู…ู† NuGet ุนุดุงู† ู†ุถูŠูู‡ู… ู„ู„ู€ project ุจุชุงุนู†ุง.

  • ุงุณู… ุงู„ู€ Package: ู„ูˆ ู‡ุชุณุชุฎุฏู… Microsoft SQL ServerุŒ ูŠุจู‚ู‰ ู…ุญุชุงุฌ ุชู†ุฒู„ ุงู„ู€ package ุฏูŠ: Microsoft.EntityFrameworkCore.SqlServer.

  • ู„ูˆ Database ุชุงู†ูŠุฉ: ูƒู„ ู†ูˆุน Database ู„ูŠู‡ ุงู„ู€ package ุจุชุงุนุชู‡ (ุฒูŠ Npgsql.EntityFrameworkCore.PostgreSQL ู„ู€ PostgreSQL ุฃูˆ Pomelo.EntityFrameworkCore.MySql ู„ู€ MySQL).

  • ุฅุฒุงูŠ ู†ู†ุฒู„ู‡ุงุŸ

    • ู…ู† ุงู„ู€ Package Manager Console (PM):
      Install-Package Microsoft.EntityFrameworkCore.SqlServer
      • ู„ูˆ ุนุงูŠุฒ version ู…ุนูŠู†:
        Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.29 // ุฃูˆ ุฃูŠ ุฑู‚ู… version ุชุงู†ูŠ
    • ู…ู† ุงู„ู€ NuGet Package Manager UI:
      • ุฏูˆุณ ูƒู„ูŠูƒ ูŠู…ูŠู† ุนู„ู‰ ุงู„ู€ Project ููŠ ุงู„ู€ Solution Explorer.
      • ุงุฎุชุงุฑ โ€œManage NuGet Packagesโ€ฆโ€œ.
      • ุฑูˆุญ ุนู„ู‰ ุชุงุจ โ€œBrowseโ€.
      • ุงุจุญุซ ุนู† Microsoft.EntityFrameworkCore.SqlServer.
      • ุงุฎุชุงุฑู‡ุง ูˆุฏูˆุณ โ€œInstallโ€.

ุดุฑุญ ุงู„ู€ Connection String

ุงู„ู€ Connection String ุฏู‡ ุนุจุงุฑุฉ ุนู† string ุจูŠุญุชูˆูŠ ุนู„ู‰ ูƒู„ ุงู„ู…ุนู„ูˆู…ุงุช ุงู„ู„ูŠ ุงู„ู€ EF Core ู…ุญุชุงุฌู‡ุง ุนุดุงู† ูŠุนุฑู ูŠูุชุญ connection ู…ุน ุงู„ู€ Database ุจุชุงุนุชูƒ. ุจูŠุชูƒูˆู† ู…ู† ุฃุฌุฒุงุก (key=value) ู…ูุตูˆู„ุฉ ุจู€ semicolon (;).

ุงู„ุฃุฌุฒุงุก ุงู„ู…ุดู‡ูˆุฑุฉ (ููŠ ุงู„ู…ุซุงู„ ุจุชุงุนู†ุง):

  • ุงู„ุตูŠุบุฉ ุงู„ุฌุฏูŠุฏุฉ (ุงู„ู…ููุถู„ุฉ):

    • ุงู„ู€ Server=.;
      • ุงู„ู€ Server: ุฏู‡ ุงุณู… ุงู„ู€ SQL Server instance ุงู„ู„ูŠ ุนู„ูŠู‡ ุงู„ู€ Database.
      • ุงู„ู‚ูŠู…ุฉ . (ู†ู‚ุทุฉ) ุฃูˆ (localdb)\mssqllocaldb ุฃูˆ localhost ู…ุนู†ุงู‡ุง ุฅู† ุงู„ู€ Server ู…ูˆุฌูˆุฏ ุนู„ู‰ ู†ูุณ ุงู„ุฌู‡ุงุฒ ุงู„ู„ูŠ ุงู„ุฃุจู„ูƒูŠุดู† ุดุบุงู„ ุนู„ูŠู‡ (local machine).
    • ุงู„ู€ Database=Company;
      • ุงู„ู€ Database: ุฏู‡ ุงุณู… ุงู„ู€ Database ู†ูุณู‡ุง ุงู„ู„ูŠ ุนุงูŠุฒ ุชุชุนุงู…ู„ ู…ุนุงู‡ุง.
    • ุงู„ู€ Trusted_Connection=True;
      • ุงู„ู€ Trusted_Connection: ู„ู…ุง ุชูƒูˆู† TrueุŒ ุฏู‡ ู…ุนู†ุงู‡ ุฅู†ูƒ ู‡ุชุณุชุฎุฏู… ุงู„ู€ Windows Authentication. ูŠุนู†ูŠ ุงู„ู€ SQL Server ู‡ูŠุณุชุฎุฏู… ู†ูุณ ุญุณุงุจ ุงู„ู€ Windows ุงู„ู„ูŠ ุฅู†ุช ุนุงู…ู„ ุจูŠู‡ login ุนุดุงู† ูŠุฏุฎู„ูƒุŒ ูˆู…ุด ู…ุญุชุงุฌ ุชูƒุชุจ username ูˆ password.
    • ุงู„ู€ Encrypt=False; (ู…ู‡ู… ู„ู„ู€ drivers ุงู„ุฌุฏูŠุฏุฉ)
      • ุงู„ู€ Encrypt: ุจุชุญุฏุฏ ุฅุฐุง ูƒุงู† ุงู„ุงุชุตุงู„ ู‡ูŠุชู… ุชุดููŠุฑู‡ ูˆู„ุง ู„ุฃ. ููŠ ุงู„ู€ versions ุงู„ุฌุฏูŠุฏุฉ ู…ู† driver ุงู„ู€ SQL ServerุŒ ุงู„ู‚ูŠู…ุฉ ุงู„ุงูุชุฑุงุถูŠุฉ ุจู‚ุช TrueุŒ ูˆุฏู‡ ู…ู…ูƒู† ูŠุณุจุจ ู…ุดุงูƒู„ ู„ูˆ ุงู„ู€ Server ู…ุด ู…ุนู…ูˆู„ ู„ู‡ setup ุนุดุงู† ูŠุฏุนู… ุงู„ุชุดููŠุฑ ุจุดู‡ุงุฏุฉ ู…ูˆุซูˆู‚ุฉ.
      • ุนุดุงู† ูƒุฏู‡ุŒ ู„ูˆ ุจุชุทูˆุฑ ุนู„ู‰ ุฌู‡ุงุฒูƒ ุงู„ู…ุญู„ูŠ (local) ุฃูˆ ููŠ ุจูŠุฆุฉ ู…ุด ู…ุญุชุงุฌุฉ ุชุดููŠุฑ ุฅุฌุจุงุฑูŠุŒ ู…ู…ูƒู† ุชุญุทู‡ุง False ู„ุชุณู‡ูŠู„ ุงู„ุฃู…ูˆุฑ ู…ุคู‚ุชู‹ุง.
      • ููŠ ุงู„ู€ ProductionุŒ ุงู„ุฃู…ุงู† ุฃู‡ู… ุทุจุนู‹ุงุŒ ูˆู‡ุชุญุชุงุฌ ุบุงู„ุจู‹ุง ุชุฎู„ูŠู‡ุง True ูˆุชุธุจุท ุดู‡ุงุฏุงุช ุงู„ุฃู…ุงู† ุตุญ ุฃูˆ ุชุณุชุฎุฏู… TrustServerCertificate=True ู„ูˆ ูุงู‡ู… ุงู„ู…ุฎุงุทุฑ.
  • ุงู„ุตูŠุบุฉ ุงู„ู‚ุฏูŠู…ุฉ (ู„ุณู‡ ุดุบุงู„ุฉ):

    • ุงู„ู€ Data Source=.; (ู†ูุณ ู…ุนู†ู‰ Server)
    • ุงู„ู€ Initial Catalog=Company; (ู†ูุณ ู…ุนู†ู‰ Database)
    • ุงู„ู€ Integrated Security=True; (ู†ูุณ ู…ุนู†ู‰ Trusted_Connection=True)
  • ู„ูˆ ู‡ุชุณุชุฎุฏู… SQL Server Authentication (Username/Password):

    • ู…ุด ู‡ุชุณุชุฎุฏู… Trusted_Connection ุฃูˆ Integrated Security.
    • ู‡ุชุถูŠู ุฏูˆู„ ุจุฏู„ู‡ู…:
      • ุงู„ู€ User ID=your_username; (ุงุณู… ุงู„ู…ุณุชุฎุฏู… ุจุชุงุน ุงู„ู€ SQL)
      • ุงู„ู€ Password=your_password; (ุงู„ุจุงุณูˆุฑุฏ ุจุชุงุน ุงู„ู€ SQL)
      • (ูˆุจุฑุถู‡ ู‡ุชุธุจุท ุงู„ู€ Encrypt ุญุณุจ ุงู„ุจูŠุฆุฉ ุจุชุงุนุชูƒ)

ุฅุฒุงูŠ ุงู„ู€ OnConfiguring ุจุชุดุชุบู„ุŸ

ู„ู…ุง ุจุชูŠุฌูŠ ููŠ ุงู„ูƒูˆุฏ ุจุชุงุนูƒ ูˆุชุนู…ู„ object ุฌุฏูŠุฏ ู…ู† ุงู„ู€ DbContext ุจุชุงุนูƒ:

// ููŠ ุฃูŠ ู…ูƒุงู† ููŠ ุงู„ูƒูˆุฏ ุจุชุงุนูƒ ู‡ุชุญุชุงุฌ ุชุชุนุงู…ู„ ู…ุน ุงู„ุฏุงุชุงุจูŠุฒ
CompanyDbContext dbContext = new CompanyDbContext();

ุงู„ู„ูŠ ุจูŠุญุตู„ ูƒุงู„ุชุงู„ูŠ:

  1. ุงู„ู€ Constructor ุจุชุงุน CompanyDbContext ุจูŠุดุชุบู„ (ุญุชู‰ ู„ูˆ ุฅู†ุช ู…ูƒุชุจุชุด constructor ูุงุถูŠุŒ ุงู„ู€ compiler ุจูŠุนู…ู„ ูˆุงุญุฏ ุงูุชุฑุงุถูŠ).
  2. ุงู„ู€ Constructor ุฏู‡ (ุจุดูƒู„ ุถู…ู†ูŠ ุฃูˆ ุตุฑูŠุญ ู„ูˆ ุนู…ู„ุช chaining) ุจูŠู†ุงุฏูŠ ุนู„ู‰ ุงู„ู€ constructor ุจุชุงุน ุงู„ู€ base class ุงู„ู„ูŠ ู‡ูˆ DbContext.
  3. ูƒุฌุฒุก ู…ู† ุนู…ู„ูŠุฉ ุงู„ู€ initialization ุงู„ู„ูŠ ุจูŠุนู…ู„ู‡ุง ุงู„ู€ constructor ุจุชุงุน DbContext ุงู„ุฃุณุงุณูŠุŒ ู‡ูˆ ุจูŠุฑูˆุญ ูŠู†ุงุฏูŠ ุนู„ู‰ ุงู„ู€ OnConfiguring method.
  4. ุจู…ุง ุฅู† ุฅุญู†ุง ุนุงู…ู„ูŠู† override ู„ู„ู€ OnConfiguring ููŠ ุงู„ูƒู„ุงุณ ุจุชุงุนู†ุง (CompanyDbContext)ุŒ ูุงู„ู†ุณุฎุฉ ุจุชุงุนุชู†ุง ู‡ูŠ ุงู„ู„ูŠ ู‡ุชุชู†ูุฐ.
  5. ุงู„ู†ุณุฎุฉ ุจุชุงุนุชู†ุง ู‡ุชุญุท ุงู„ุฅุนุฏุงุฏุงุช ุงู„ู„ูŠ ูƒุชุจู†ุงู‡ุง (ุฒูŠ UseSqlServer ู…ุน ุงู„ู€ Connection String) ุฌูˆู‡ ุงู„ู€ optionsBuilder.
  6. ูƒุฏู‡ ุงู„ู€ DbContext ุจู‚ู‰ ุฌุงู‡ุฒ ูˆู…ุนุงู‡ ูƒู„ ุงู„ู…ุนู„ูˆู…ุงุช ุงู„ู„ูŠ ู…ุญุชุงุฌู‡ุง ุนุดุงู† ูŠูˆุตู„ ู„ู„ู€ Database.

ุนู„ุงู‚ุฉ ุฏู‡ ุจุงู„ู€ DbContextOptions:

ุงู„ู€ optionsBuilder ุงู„ู„ูŠ ุจู†ุณุชุฎุฏู…ู‡ ุฌูˆู‡ OnConfiguring ู‡ูˆ ู…ู† ู†ูˆุน DbContextOptionsBuilder. ุฏู‡ ุงู„ู€ object ุงู„ู„ูŠ ุงู„ู€ EF Core ุจูŠุฏูŠู‡ูˆู„ู†ุง ุนุดุงู† ู†ุจู†ูŠ (build) ุงู„ู€ options ุงู„ู„ูŠ ุงู„ู€ DbContext ู‡ูŠุณุชุฎุฏู…ู‡ุง. ุงู„ู€ options ุฏูŠ ููŠ ุงู„ุขุฎุฑ ุจุชุจู‚ู‰ object ู…ู† ู†ูˆุน DbContextOptions (ุฃูˆ DbContextOptions<TContext>).

ููŠู‡ ุทุฑู‚ ุชุงู†ูŠุฉ ู„ุชู…ุฑูŠุฑ ุงู„ู€ options ุฏูŠ ู„ู„ู€ DbContext (ุฒูŠ ุฅู†ู†ุง ู†ุนู…ู„ constructor ููŠ CompanyDbContext ุจูŠุงุฎุฏ DbContextOptions<CompanyDbContext> ูƒู€ parameter ูˆู†ู…ุฑุฑู‡ุง ู„ู„ู€ base constructor)ุŒ ูˆุฏูŠ ุงู„ุทุฑูŠู‚ุฉ ุงู„ุฃูƒุซุฑ ุดูŠูˆุนู‹ุง ู„ู…ุง ุจู†ุณุชุฎุฏู… DNAPI Dependency Injection. ู„ูƒู† ุทุฑูŠู‚ุฉ ุงู„ู€ OnConfiguring ุฏูŠ ุจุณูŠุทุฉ ูˆู…ุจุงุดุฑุฉ ู„ูˆ ุงู„ุฅุนุฏุงุฏุงุช ุซุงุจุชุฉ ูˆู…ุด ู…ุญุชุงุฌุฉ ุชุชุบูŠุฑ ู…ู† ุจุฑู‡.

ุฏู„ูˆู‚ุชูŠ ุงู„ู€ DbContext ุจุชุงุนู†ุง ุฌุงู‡ุฒ ูŠุนุฑู ูŠูˆุตู„ ู„ู„ู€ Database. ุงู„ุฎุทูˆุฉ ุงู„ุฌุงูŠุฉ ุฅู†ู†ุง ู†ุนุฑูู‡ ุนู„ู‰ ุงู„ู€ Models ุจุชุงุนุชู†ุง (ุฒูŠ Employee) ุนุดุงู† ูŠู‚ุฏุฑ ูŠุญูˆู„ู‡ุง ู„ู€ Table. ุฏู‡ ุจูŠุชู… ุนู† ุทุฑูŠู‚ ุฅุถุงูุฉ DbSet properties ุฌูˆู‡ ุงู„ู€ DbContext.