Verwendung des DbContext in Entity Framework Core

Das Entity Framework von Microsoft ist ein Open-Source-Objekt-Relational-Mapper (ORM) für ADO.Net, mit dem Sie das Objektmodell Ihrer Anwendung vom Datenmodell isolieren können. Entity Framework vereinfacht den Datenzugriff in Ihrer Anwendung, indem Sie Code schreiben können, um CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren und Löschen) auszuführen, ohne wissen zu müssen, wie die Daten in der zugrunde liegenden Datenbank gespeichert werden.

Der DbContext fungiert als Brücke zwischen den Domänenklassen und der Datenbank. In diesem Artikel werden wir untersuchen, wie wir den DbContext mithilfe einer Instanz von DbContextOptions konfigurieren können, um eine Verbindung zu einer Datenbank herzustellen und CRUD-Operationen mithilfe des Entity Framework Core-Anbieters auszuführen.

DbContext erklärt

Der DbContext ist ein integraler Bestandteil des Entity Framework, das eine Verbindungssitzung mit der Datenbank darstellt. Sie können den DbContext nutzen, um Daten in Ihre Entitäten abzufragen oder Ihre Entitäten in der zugrunde liegenden Datenbank zu speichern. Der DbContext in Entity Framework Core hat eine Reihe von Verantwortlichkeiten:

  • Verbindungen verwalten
  • Abfragen von Daten aus der Datenbank
  • Speichern von Daten in der Datenbank
  • Tracking ändern
  • Caching
  • Transaktionsmanagement

In den folgenden Abschnitten werden wir untersuchen, wie wir mit dem DbContext in ASP.Net Core arbeiten können.

Erstellen Sie eine ASP.Net Core-Anwendung in Visual Studio

Wir beginnen mit der Erstellung einer ASP.Net Core-Anwendung. Beachten Sie, dass in diesem Beitrag davon ausgegangen wird, dass Visual Studio 2017 bereits auf Ihrem System installiert ist. Wenn Sie Visual Studio 2017 nicht installiert haben, können Sie hier eine Kopie herunterladen. Führen Sie dann die folgenden Schritte aus, um ein neues ASP.Net Core-Projekt zu erstellen.

  1. Starten Sie die Visual Studio 2017-IDE.
  2. Klicken Sie auf Datei -> Neu -> Projekt.
  3. Wählen Sie die Projektvorlage "ASP.Net Core Web Application" aus.
  4. Geben Sie den Namen und den Speicherort für Ihr Projekt an.
  5. OK klicken.
  6. Wählen Sie im Dialogfeld "Neue ASP.Net Core-Webanwendung" die Option .Net Core aus.
  7. Wählen Sie ASP.Net Core 2.1 aus der Dropdown-Liste aus. 
  8. Wählen Sie als Projektvorlage "Web API". 
  9. Ignorieren Sie das Kontrollkästchen "Docker-Unterstützung aktivieren". Wir werden Docker hier nicht verwenden.
  10. Stellen Sie sicher, dass die Meldung "Keine Authentifizierung" angezeigt wird. das werden wir auch nicht brauchen. 
  11. OK klicken

Und das ist es! Wir werden diese Anwendung verwenden, um Entity Framework Core in den folgenden Abschnitten zu untersuchen.

Erstellen Sie einen neuen DbContext in Entity Framework Core

Um eine benutzerdefinierte Context-Klasse zu erstellen, sollten Sie die DbContext-Basisklasse in Entity Framework Core wie unten gezeigt erweitern.

öffentliche Klasse CustomContext: DbContext

    {

        public CustomContext (DbContextOptions-Optionen): base (Optionen)

        {

        }}

        geschützte Überschreibung void OnConfiguring (DbContextOptionsBuilder optionsBuilder)

        {

           // Schreiben Sie hier Ihren Code, um den Kontext zu konfigurieren

        }}

        geschützte Überschreibung void OnModelCreating (ModelBuilder modelBuilder)

        {

            // Schreiben Sie hier Ihren Code, um das Modell zu konfigurieren

        }}

    }}

Weitere Informationen finden Sie oben in der CustomContext-Klasse. Beachten Sie, dass ein Verweis auf eine Instanz der DbContextOptions-Klasse akzeptiert wird. Diese Instanz enthält die Konfigurationsinformationen, die vom DbContext benötigt werden. Sie können den DbContext auch mit der OnConfiguring-Methode konfigurieren. Die OnModelCreating-Methode, die einen Verweis auf eine Instanz der ModelBuilder-Klasse als Argument akzeptiert, wird zum Konfigurieren des Modells verwendet.

In der DbContext-Klasse verfügen Sie normalerweise über die DbSet-Eigenschaften von Entitäten, wie im folgenden Codeausschnitt gezeigt.

öffentliche Klasse CustomContext: DbContext

    {

        public CustomContext (DbContextOptions-Optionen): base (Optionen)

        {

        }}

        geschützte Überschreibung void OnConfiguring (DbContextOptionsBuilder optionsBuilder)

        {

        }}

        geschützte Überschreibung void OnModelCreating (ModelBuilder modelBuilder)

        {

        }}

        öffentliche DbSet-Autoren {get; einstellen; }}

        öffentliche DbSet-Blogs {get; einstellen; }}

    }}

Registrieren Sie den DbContext mit der Entity Framework Core-Laufzeit

Als Nächstes sollten Sie Ihre benutzerdefinierte DbContext-Klasse über die ConfigureServices-Methode der Startup-Klasse als Service in der IServiceCollection registrieren.

     public void ConfigureServices (IServiceCollection-Dienste)

        {

            services.AddMvc (). SetCompatibilityVersion

            (CompatibilityVersion.Version_2_1);

            services.AddDbContext (options =>

             options.UseSqlServer

             (Configuration.GetConnectionString ("TestConnection")));

        }}

Die Verbindungszeichenfolge wird mithilfe der IConfiguration-Instanz abgerufen. Die AddDbContext-Erweiterungsmethode wird verwendet, um den DbContext als Dienst zu registrieren. Beachten Sie, wie ein Verweis auf DbContextOptionsBuilder zum Konfigurieren der DbContextOptions verwendet wird. Die UseSqlServer-Erweiterungsmethode wird verwendet, um den SQL Server-Datenbankanbieter bei der Entity Framework Core-Laufzeit zu registrieren.

Alternativ können Sie die OnConfigure-Methode überschreiben, um den SQL Server-Datenbankanbieter zu registrieren, wie im folgenden Codeausschnitt gezeigt.

geschützte Überschreibung void OnConfiguring (DbContextOptionsBuilder optionsBuilder)

    {

        if (! optionsBuilder.IsConfigured)

        {

            optionsBuilder.UseSqlServer ("TestConnection");

        }}

    }}

Verwenden Sie den DbContext mit Abhängigkeitsinjektion

Um den benutzerdefinierten DbContext zu verwenden, den wir in den Controller-Methoden implementiert haben, sollten Sie die Abhängigkeitsinjektion nutzen. Das folgende Codefragment zeigt, wie dies erreicht werden kann.

öffentliche Klasse ValuesController: ControllerBase

    {

        privater CustomContext dbContext;

        public ValuesController (CustomContext customContext)

        {

            dbContext = customContext;

        }}

       //Andere Methoden

    }}

Und das ist alles was Sie tun müssen. Sie können jetzt die Instanz der CustomContext-Klasse in Ihren Controller-Methoden nutzen, um CRUD-Operationen auszuführen.

Der DbContext ähnelt konzeptionell dem ObjectContext. Der DbContext stellt eine Kombination aus Arbeitseinheit und Repository-Entwurfsmustern dar und ist für jede Interaktion zwischen der Anwendung und der verwendeten Datenbank verantwortlich. Ich werde hier in zukünftigen Beiträgen weitere Aspekte von Entity Framework Core diskutieren.