Herstellen einer Verbindung mit Azure SQL Datenbank und Abfragen mithilfe von .NET und Entity Framework Core

Gilt für:Azure SQL-Datenbank

Dieser Quickstart beschreibt, wie man eine Anwendung mit einer Datenbank in Azure SQL-Datenbank verbindet und Abfragen mit .NET und Entity Framework Core durchführt. In dieser Schnellstartanleitung wird der empfohlene kennwortlose Ansatz zum Herstellen einer Verbindung mit der Datenbank verwendet. Um mehr über passwortlose Verbindungen zu erfahren, siehe den passwortlosen Hub.

Voraussetzungen

Konfigurieren des Datenbankservers

Sichere, kennwortlose Verbindungen mit Azure SQL-Datenbank erfordern bestimmte Datenbankkonfigurationen. Überprüfen Sie die folgenden Einstellungen auf Ihrem logischen Server in Azure, um eine ordnungsgemäße Verbindung mit Azure SQL-Datenbank in lokalen und gehosteten Umgebungen herzustellen:

  1. Stellen Sie für lokale Entwicklungsverbindungen sicher, dass Ihr logischer Azure SQL-Server so konfiguriert ist, dass Ihre IP-Adresse des lokalen Computers und andere Azure-Dienste eine Verbindung herstellen können:

    1. Wählen Sie im Azure-Portal im Ressourcenmenü unter "Sicherheit" die Option "Netzwerk" aus.

    2. Wählen Sie die Schaltfläche "Ausgewählte Netzwerke " aus, um weitere Konfigurationsoptionen anzuzeigen.

    3. Wählen Sie Client-IPv4-Adresse (xx.xx.xx.xx) hinzufügen aus, um eine Firewallregel hinzuzufügen, die Verbindungen von der IPv4-Adresse Ihres lokalen Computers ermöglicht. Alternativ können Sie auch + Firewallregel hinzufügen auswählen, um eine bestimmte IP-Adresse Ihrer Wahl einzugeben.

    4. Vergewissern Sie sich, dass das Kontrollkästchen Azure-Diensten und -Ressourcen den Zugriff auf diesen Server gestatten aktiviert ist.

      Screenshot des Azure-Portals, der zeigt, wie die Firewallregeln für die logische Azure SQL-Serverfirewall konfiguriert werden.

      Warnung

      Das Aktivieren der Einstellung Azure-Diensten und -Ressourcen den Zugriff auf diesen Server gestatten ist kein empfohlenes Sicherheitsverfahren für Produktionsszenarien. Echte Anwendungen sollten sicherere Ansätze implementieren, z. B. stärkere Firewalleinschränkungen oder Konfigurationen mit virtuellen Netzwerken.

      Weitere Informationen zum Konfigurieren der Datenbanksicherheit finden Sie in den folgenden Ressourcen:

  2. Der Server muss auch die Microsoft Entra-Authentifizierung aktiviert haben und ein Microsoft Entra-Administratorkonto zugewiesen haben. Bei lokalen Entwicklungsverbindungen sollte das Microsoft Entra-Administratorkonto ein Konto sein, mit dem Sie sich auch lokal bei Visual Studio oder der Azure CLI anmelden können. Sie können überprüfen, ob der Server die Microsoft Entra-Authentifizierung auf der Microsoft Entra-ID-Seite Ihres logischen Servers aktiviert hat.

    Ein Screenshot, der das Aktivieren der Microsoft Entra-Authentifizierung anzeigt.

  3. Wenn Sie ein persönliches Azure-Konto verwenden, stellen Sie sicher, dass Sie Microsoft Entra für Azure SQL-Datenbank eingerichtet und konfiguriert haben, um Ihr Konto als Server-Admin zuzuweisen. Wenn Sie ein Unternehmenskonto verwenden, ist die Microsoft Entra ID höchstwahrscheinlich bereits für Sie konfiguriert.

Erstellen des Projekts

Mit den Schritten in diesem Abschnitt wird über die .NET-CLI oder in Visual Studio 2022 eine .NET-Minimal-Web-API erstellt.

  1. In der Menüleiste von Visual Studio gehe zu File>NewProject>.

  2. Geben Sie im Dialogfenster ASP.NET in das Suchfeld für Projektvorlagen ein, und wählen Sie das Ergebnis ASP.NET Core Web API aus. Wählen Sie unten im Dialogfeld Weiter aus.

  3. Geben Sie für den ProjektnamenDotNetSQL ein. Behalten Sie die Standardwerte für die restlichen Felder bei, und wählen Sie "Weiter" aus.

  4. Wählen Sie für das Framework .NET 10.0 aus, und entfernen Sie das Häkchen bei Controller verwenden. In dieser Schnellstartanleitung wird eine Minimal-API-Vorlage verwendet, um die Erstellung und Konfiguration von Endpunkten zu optimieren.

  5. Wählen Sie Erstellen. Das neue Projekt wird in der Visual Studio-Umgebung geöffnet.

Hinzufügen von Entity Framework Core zum Projekt

Um sich mit Azure SQL-Datenbank über .NET und Entity Framework Core zu verbinden, fügen Sie Ihrem Projekt die folgenden NuGet-Pakete hinzu, wobei Sie eine der folgenden Methoden verwenden:

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Knoten Abhängigkeiten, und wählen Sie NuGet-Pakete verwalten aus.

  2. Suchen Sie im diesem Fenster nach EntityFrameworkCore. Suchen und installieren Sie die folgenden Pakete:

  • Microsoft.EntityFrameworkCore: Stellt wesentliche Entity Framework Core-Funktionen bereit.
  • Microsoft.EntityFrameworkCore.SqlServer: Stellt zusätzliche Komponenten zum Herstellen einer Verbindung mit dem logischen Server bereit.
  • Microsoft.EntityFrameworkCore.Design: Bietet Unterstützung für die Ausführung von Entity Framework-Migrationen
  • Microsoft.EntityFrameworkCore.Tools: Bietet Unterstützung für das Visual Studio-Paket-Manager-Konsolen-Tooling (nur PowerShell)
  • Microsoft.AspNetCore.OpenApi: Optional – unterstützt die Erstellung der OpenAPI-Dokumentation
  • Swashbuckle.AspNetCore.SwaggerUI: Optional – bietet OpenAPI-UI-Interaktion mit den App-Endpunkten

Hinzufügen des Codes zum Herstellen einer Verbindung mit Azure SQL-Datenbank

Die Entity Framework Core-Bibliotheken nutzen die Bibliotheken Microsoft.Data.SqlClient und Azure.Identity, um kennwortlose Verbindungen mit Azure SQL Datenbank zu implementieren. Die Bibliothek Azure.Identity stellt eine Klasse namens DefaultAzureCredential bereit, die die kennwortlose Authentifizierung bei Azure verarbeitet.

DefaultAzureCredential unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche zur Runtime verwendet wird. Bei diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (lokal gegenüber Produktion) verwenden, ohne umgebungsspezifischen Code zu implementieren. In der Übersicht zur Azure Identity-Bibliothek wird die Reihenfolge und die Speicherorte erklärt, an denen DefaultAzureCredential nach Anmeldeinformationen sucht.

Führen Sie die folgenden Schritte aus, um mithilfe von Entity Framework Core und der zugrunde liegenden Klasse DefaultAzureCredential eine Verbindung mit Azure SQL Datenbank herzustellen:

  1. Fügen Sie der ConnectionStrings Datei einen appsettings.Development.json-Abschnitt entsprechend dem folgenden Code hinzu. Ersetzen Sie den <server>.database.windows.net Namen des kennwortlosen Datenbankservers, mit dem Sie eine Verbindung herstellen möchten, und <database> durch den Namen der Datenbank.

    {
        "Logging": {
            "LogLevel": {
                "Default": "Information",
                "Microsoft.AspNetCore": "Warning"
            }
        },
        "ConnectionStrings": {
            "AZURE_SQL_CONNECTIONSTRING": "Data Source=<server>.database.windows.net;Initial Catalog=<database>;Authentication=Active Directory Default;Encrypt=True;"
        }
    }
    

    Hinweis

    Denken Sie daran, die Platzhalter <your database-server-name> und <your-database-name> in der Datenbankverbindungszeichenfolge zu aktualisieren. Kennwortlose Verbindungszeichenfolgen können sicher in die Quellcodeverwaltung aufgenommen werden, da sie keine Geheimnisse wie Benutzernamen, Kennwörter oder Zugriffsschlüssel enthalten.

    Die kennwortlose Verbindungszeichenfolge enthält den Konfigurationswert Authentication=Active Directory Default, der es Entity Framework Core ermöglicht, DefaultAzureCredential zum Herstellen einer Verbindung mit Azure-Diensten zu verwenden. Wenn die App lokal ausgeführt wird, authentifiziert sie sich mit dem Benutzer, als der Sie bei Visual Studio angemeldet sind. Sobald die App in Azure bereitgestellt wird, ermittelt und wendet derselbe Code die verwaltete Identität an, die der gehosteten App zugeordnet ist, die Sie später konfigurieren.

  2. Ersetzen Sie den Inhalt der Datei Program.cs durch den folgenden Code:

    using Microsoft.EntityFrameworkCore;
    
    var builder = WebApplication.CreateBuilder();
    
    builder.Services.AddOpenApi();
    
    var connection = string.Empty;
    if (builder.Environment.IsDevelopment())
    {
        builder.Configuration.AddEnvironmentVariables().AddJsonFile("appsettings.Development.json");
        connection = builder.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING");
    }
    else
    {
        connection = Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING");
    }
    
    builder.Services.AddDbContext<PersonDbContext>(options =>
        options.UseSqlServer(connection));
    
    var app = builder.Build();
    
    if (app.Environment.IsDevelopment())
    {
        app.MapOpenApi();
        app.UseSwaggerUI(options =>
        {
            options.SwaggerEndpoint("/openapi/v1.json", "v1");
        });
    }
    
    app.MapGet("/", () => "Hello world!");
    
    app.MapGet("/Person", (PersonDbContext context) => context.Person.ToList());
    
    app.MapPost("/Person", (Person person, PersonDbContext context) =>
    {
        context.Add(person);
        context.SaveChanges();
    });
    
    app.Run();
    
    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    
    public class PersonDbContext(DbContextOptions<PersonDbContext> options) : DbContext(options)
    {
        public DbSet<Person> Person { get; set; }
    }
    

    Der vorangehende Code behandelt die folgenden Schritte:

    • Ruft die kennwortlose Datenbank-Verbindungszeichenfolge für die lokale Entwicklung aus der Datei appsettings.Development.json oder in gehosteten Produktionsszenarien aus den Umgebungsvariablen ab.
    • Registriert die Entity Framework Core-Klasse DbContext beim .NET-Container für die Abhängigkeitsinjektion. Weitere Informationen zu DbContext finden Sie in der Dokumentation Erste Schritte für Entity Framework Core.
    • Konfigurieren Sie die .NET 10.0 OpenAPI-Unterstützung mit SwaggerUI, um eine Benutzeroberfläche bereitzustellen, mit der Sie mit den App-Endpunkten und der Datenbank interagieren können.
    • Fügt Endpunkte zum Abrufen und Hinzufügen von Entitäten in der Datenbank hinzu.
    • Definiert eine Person Klasse, die einen einzelnen Datensatz in der Persons Datenbanktabelle darstellt, und die Klasse, die PersonDbContext beim .NET-Abhängigkeitseinfügungscontainer registriert wurde.

Ausführen der Migrationen zum Erstellen der Datenbank

Um das Datenbankschema mit Entity Framework Core an Ihr Datenmodell anzupassen, verwenden Sie eine Migration. Migrationen können ein Datenbankschema erstellen und inkrementell aktualisieren, um es mit dem Datenmodell Ihrer Anwendung zu synchronisieren. Um mehr über dieses Muster zu erfahren, siehe die Migrationsübersicht.

  1. Öffnen Sie ein Terminalfenster im Stammverzeichnis Ihres Projekts.

  2. Führen Sie den folgenden Befehl aus, um eine Erstmigration zu generieren, mit der die Datenbank erstellt werden kann:

    Add-Migration InitialCreate
    
  3. In Ihrem Projektverzeichnis sollte der Ordner Migrations angezeigt werden, zusammen mit einer Datei mit dem Namen InitialCreate, dem eindeutige Ziffern vorangestellt sind. Führen Sie die Migration aus, um die Datenbank mithilfe des folgenden Befehls zu erstellen, und das Entity Framework Core-Tooling erstellt das Datenbankschema in Azure, das von der PersonDbContext Klasse definiert wird.

    Update-Database
    

Lokales Testen der App

Die App ist bereit, lokal getestet zu werden. Stelle sicher, dass du mit demselben Konto, das du als Administrator deiner Datenbank eingerichtet hast, in Visual Studio oder der Azure CLI angemeldet bist.

  1. Wählen Sie den Ausführen-Button oben in Visual Studio, um das API-Projekt zu starten.

  2. Auf der Swagger-UI-Seite (zum Beispiel https://localhost:<port>/swagger) erweitern Sie die Methode POST und wählen Ausprobieren.

  3. Ändern Sie den JSON-Beispielwert so, dass Werte für den Vornamen und den Familiennamen enthalten sind. Wählen Sie Ausführen aus, um der Datenbank einen neuen Datensatz hinzuzufügen. Die API gibt eine Erfolgsmeldung zurück.

    Screenshot, der zeigt, wie man die API testet.

  4. Erweitern Sie die GET Methode auf der Seite "Swagger UI", und wählen Sie "Testen" aus. Wählen Sie Ausführen aus, und die soeben erstellte Person wird zurückgegeben.

Bereitstellung in Azure App Service

Die App ist bereit zur Bereitstellung auf Azure. Visual Studio kann eine Azure App Service-Instanz erstellen und Ihre Anwendung in einem einzigen Workflow bereitstellen.

  1. Stellen Sie sicher, dass die App angehalten ist und erfolgreich erstellt wird.

  2. Klicke Sie im Projektmappen-Explorer-Fenster von Visual Studio mit der rechten Maustaste auf den Projektknoten der obersten Ebene, und wählen Sie Veröffentlichen aus.

  3. Wählen Sie im Veröffentlichungsdialogfeld Azure als Bereitstellungsziel und dann Weiter aus.

  4. Wählen Sie als bestimmtes Ziel Azure App Service (Windows) und dann Weiter aus.

  5. Wählen Sie das grüne +-Symbol aus, um eine neue App Service-Instanz zur Bereitstellung zu erstellen, und geben Sie die folgenden Werte ein:

    • Name: Behalten Sie den Standardwert bei.
    • Abonnementname: Wählen Sie das Abonnement aus, in das die Bereitstellung erfolgen soll.
    • Ressourcengruppe: Wählen Sie Neu aus, und erstellen Sie eine neue Ressourcengruppe mit dem Namen msdocs-dotnet-sql.
    • Hostingplan: Wählen Sie Neu aus, um das Dialogfeld „Hostingplan“ zu öffnen. Behalten Sie die Standardwerte bei, und wählen Sie OK aus.
    • Wählen Sie Erstellen aus, um das ursprüngliche Dialogfeld zu schließen. Visual Studio erstellt die App Service-Ressource in Azure.

    Screenshot zeigt, wie die Bereitstellung mit Visual Studio erfolgt.

  6. Nachdem die Ressource erstellt wurde, stelle sicher, dass du sie in der Liste der App-Dienste auswählst, und wähle dann Next aus.

  7. Aktivieren Sie im Schritt API Management unten das Kontrollkästchen Diesen Schritt überspringen, und wählen Sie dann Fertig stellen aus.

  8. Wählen Sie oben rechts in der Zusammenfassung des Veröffentlichungsprofils Veröffentlichen aus, um die App in Azure bereitzustellen.

Nach der Bereitstellung startet Visual Studio den Browser, um die gehostete App anzuzeigen. Du siehst die Hello world Nachricht vom Standard-Endpunkt. An diesem Punkt funktionieren die Datenbankendpunkte jedoch nicht ordnungsgemäß in Azure. Sie müssen weiterhin die sichere Verbindung zwischen der App Service- und der SQL-Datenbank-Instanz konfigurieren, um Ihre Daten abzurufen.

Verbinden der App Service-Instanz mit Azure SQL-Datenbank

Um die App Service-Instanz mit der Azure SQL-Datenbank zu verbinden, führen Sie die folgenden Schritte aus:

  1. Erstellen Sie eine verwaltete Identität für den App Service. Die Microsoft.Data.SqlClient in Ihrer App enthaltene Bibliothek erkennt automatisch die verwaltete Identität, genau wie sie ihren lokalen Visual Studio-Benutzer ermittelt hat.

  2. Erstellen Sie einen SQL-Datenbankbenutzer, und ordnen Sie ihn der verwalteten App Service-Identität zu.

  3. Weisen Sie dem Datenbankbenutzer SQL-Rollen zu, die über Lese-, Schreib- und möglicherweise andere Berechtigungen verfügen.

Sie können mehrere Werkzeuge verwenden, um diese Schritte umzusetzen:

Der Dienstconnector ist ein Tool, das authentifizierte Verbindungen zwischen verschiedenen Diensten in Azure optimiert. Service Connector unterstützt derzeit die Verbindung eines App Service mit einer SQL-Datenbank über die passwortlose Azure CLI-Erweiterung.

  1. Installieren oder aktualisieren Sie die kennwortlose Service Connector-Erweiterung:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Führe den az webapp connection create sql Befehl aus, um deine Webanwendung mit der Datenbank zu verbinden, indem du eine systemzugeordnete verwaltete Identität verwendest. Ersetzen Sie die Platzhalter durch entsprechende Werte:

    az webapp connection create sql
    -g <your-resource-group>
    -n <your-app-service-name>
    --tg <your-database-server-resource-group>
    --server <your-database-server-name>
    --database <your-database-name>
    --system-identity
    

Sie können die vom Service Connector vorgenommenen Änderungen in den App Service-Einstellungen überprüfen.

  1. Gehe zur Identitätsseite deines App-Dienstes. Auf der Registerkarte Systemseitig zugewiesen sollte der Status auf Ein festgelegt werden. Dieser Wert bedeutet, dass eine systemseitig zugewiesene verwaltete Identität für Ihre App aktiviert wurde.

  2. Gehe zur Konfigurationsseite deines App-Dienstes. Unter der Registerkarte "Verbindungszeichenfolgen " sollte eine Verbindungszeichenfolge mit dem Namen angezeigt werden AZURE_SQL_CONNECTIONSTRING. Wählen Sie Klicken Sie, um den Wert anzuzeigen aus, um die generierte kennwortlose Verbindungszeichenfolge anzuzeigen. Der Name dieser Verbindungszeichenfolge richtet sich an die in Ihrer App konfigurierte Verbindungszeichenfolge, sodass sie automatisch erkannt wird, wenn sie in Azure ausgeführt wird.

Wichtig

Obwohl diese Lösung einen grundlegenden Ansatz zum Einstieg bietet, ist sie keine Best Practice für Unternehmensproduktionsumgebungen. In solchen Fällen sollte die App nicht alle Operationen mit einer einzigen, erhöhten Identität ausführen. Setzen Sie das Prinzip der geringsten Privilegien um, indem Sie mehrere Identitäten mit spezifischen Berechtigungen für bestimmte Aufgaben konfigurieren. Weitere Informationen zum Konfigurieren von Datenbankrollen und Sicherheit finden Sie unter:

Testen der bereitgestellten Anwendung

Navigieren Sie zur URL der App, um zu testen, ob die Verbindung mit Azure SQL-Datenbank funktioniert. Sie finden die URL Ihrer App auf der App Service-Übersichtsseite. Fügen Sie den /person-Pfad dem Ende der URL an, um zu dem Endpunkt zu navigieren, den Sie lokal getestet haben.

Die Person, die Sie lokal erstellt haben, sollte im Browser angezeigt werden. Herzlichen Glückwunsch, Ihre Anwendung ist jetzt sowohl in lokalen als auch in gehosteten Umgebungen mit Azure SQL-Datenbank verbunden.

Bereinigen der Ressourcen

Wenn Sie Ihre Arbeit mit der Azure SQL-Datenbank abgeschlossen haben, löschen Sie die Ressource, um unbeabsichtigte Gebühren zu vermeiden.

  1. Geben Sie in der Suchleiste des Azure-Portals Azure SQL ein, und wählen Sie das entsprechende Ergebnis aus.

  2. Suchen Sie Ihre Datenbank in der Liste der Datenbanken, und wählen Sie sie aus.

  3. Wählen Sie auf der Seite Übersicht Ihrer Azure SQL-Datenbank die Option Löschen aus.

  4. Geben Sie auf der daraufhin geöffneten Azure-Seite Möchten Sie ... löschen zur Bestätigung den Namen Ihrer Datenbank ein, und wählen Sie dann Löschen aus.

Hinweis

Wenn du die Beispiel-App auf Azure bereitgestellt hast, solltest du auch nach der App Service-Ressource suchen und sie löschen, um unbeabsichtigte Kosten zu vermeiden.