EF Core DbContext
Home

EF Core DbContext

EF Core DbContext

De kern van het Entity Framework Core is de 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.

EF Core DbContext Dependancy Injection
EF Core DbContext Dependancy Injection

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)
        {
        }

JI
2017-01-18 21:22:24