EF Core DbContext
Microsoft.EntityFrameworkCore.DbContext
klasse. Het is deze klasse (of, beter gezegd, de klassen die jij maakt op basis van deze klasse) die de toegangspoort tot de database is en alle methoden biedt die je nodig hebt om met de database te werken.DbContext
Voordat een klassemodel kan worden gebruikt om een query op een database uit te voeren, moet Entity Framework weten hoe het code (klassen, eigenschappen, en instanties) heen en weer moeten vertalen van C# naar SQL (in het bijzonder, tabellen, kolommen en rijen ). Daarvoor gebruikt het ORM of object relational mapping.
Een context is een klasse die erft van DBContext
en die een aantal entiteit-collecties toegankelijk maakt in de vorm van DbSet<T>
eigenschappen.
DbContext gebruiken met dependency injection
EF ondersteunt DbContext
met een dependency injection container. Je kan het DbContext type toevoegen aan de service container door gebruik te maken van AddDbContext<TContext>
.
AddDbContext
maakt en voegt een een DbContext
type, TContext
, en DbContextOptions<TContext>
toe, die dan beschikbaar is in de service container voor injectie.
Meer over Dependency injection.
Stap 1: voeg de connectiestring toe appsettings.json
{
"ApplicationInsights": {
"InstrumentationKey": ""
},
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-Mikmak-b95d25d9-81a2-45c1-9cad-9647e376ce20;Trusted_Connection=True;MultipleActiveResultSets=true",
"Mikmak": "Server=92.222.220.213,1500;Database=_13875_JefInghelbrecht;User Id=sa;Password=xxxxxxxx;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
Stap 2: voeg DbContext toe aan de dependency injection container
In de Startup klasse moet je verwijzen naar de namespace waarin de DbContext klasse, die voor de database toegang gebruikt, staat:
using Mikmak.Models;
De naam van de DbContext
klasse, die door scaffolding werd genereerd is de naam van de database. Als je een andere naam wilt geven, verander je de naam van DbContext
klasse en van de namespace in dat bestand. Ik heb beiden veranderd in MikmakDbContext
.

Dan voeg je DbContext van je app toe aan de injection container:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddDbContext<MikmakDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Mikmak")));
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
Als je nog geen instantie hebt van de Configuration
klasse moet je die nog eerst nog builden op basis van appsettings.json
:
namespace Mikmak { public class Startup { public IConfigurationRoot Configuration { get; } public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); Configuration = builder.Build();
Stap 3: voeg een constructor argument toe aan je DbContext
type dat een DbContextOption
aanvaardt:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
namespace Mikmak.Models
{
public partial class MikmakDbContext : DbContext
{
public MikmakDbContext(DbContextOptions<MikmakDbContext> options)
: base(options)
{
}