Verbinding maken met en query's uitvoeren op Azure SQL Database met behulp van .NET en Entity Framework Core

Van toepassing op:Azure SQL Database

Deze quickstart beschrijft hoe je een applicatie verbindt met een database in Azure SQL Database en queries uitvoert met .NET en Entity Framework Core. Deze quickstart volgt de aanbevolen benadering zonder wachtwoord om verbinding te maken met de database. Voor meer informatie over wachtwoordloze verbindingen, zie de wachtwoordloze hub.

Vereiste voorwaarden

De databaseserver configureren

Voor beveiligde, wachtwoordloze verbindingen met Azure SQL Database zijn bepaalde databaseconfiguraties vereist. Controleer de volgende instellingen op uw logische server in Azure om verbinding te maken met Azure SQL Database in zowel lokale als gehoste omgevingen:

  1. Zorg ervoor dat uw logische Azure SQL-server is geconfigureerd voor lokale ontwikkelingsverbindingen, zodat het IP-adres van uw lokale computer en andere Azure-services verbinding kunnen maken:

    1. Selecteer Netwerken in azure Portal in het resourcemenu onder Beveiliging.

    2. Selecteer de knop Geselecteerde netwerken om extra configuratieopties weer te geven.

    3. Selecteer Voeg uw IPv4-clientadres (xx.xx.xx.xx) toe om een firewallregel toe te voegen waarmee verbindingen vanaf het IPv4-adres van uw lokale computer worden ingeschakeld. U kunt ook + Een firewallregel toevoegen selecteren om een specifiek IP-adres van uw keuze in te voeren.

    4. Zorg ervoor dat het selectievakje Azure-services en -resources toegang geven tot deze server is ingeschakeld.

      Schermopname van Azure Portal waarin wordt getoond hoe u de firewallregels voor de logische Azure SQL-server configureert.

      Waarschuwing

      Het inschakelen van de Toestaan dat Azure-services en -resources toegang krijgen tot deze server instelling is geen aanbevolen beveiligingspraktijk voor productiescenario's. Echte toepassingen moeten veiligere benaderingen implementeren, zoals sterkere firewallbeperkingen of configuraties van virtuele netwerken.

      Meer informatie over databasebeveiligingsconfiguraties vindt u in de volgende bronnen:

  2. Op de server moet ook Microsoft Entra-verificatie zijn ingeschakeld en moet een Microsoft Entra-beheerdersaccount zijn toegewezen. Voor lokale ontwikkelingsverbindingen moet het Microsoft Entra-beheerdersaccount een account zijn waarmee u zich ook lokaal kunt aanmelden bij Visual Studio of de Azure CLI. U kunt controleren of Microsoft Entra-verificatie is ingeschakeld op de Microsoft Entra ID pagina van uw logische server.

    Een schermopname waarin wordt getoond hoe u Microsoft Entra-verificatie inschakelt.

  3. Als u een persoonlijk Azure-account gebruikt, moet u ervoor zorgen dat u Microsoft Entra hebt ingesteld en geconfigureerd voor Azure SQL Database om uw account toe te wijzen als serverbeheerder. Als u een bedrijfsaccount gebruikt, wordt de Microsoft Entra-id waarschijnlijk al voor u geconfigureerd.

Het project maken

Met de stappen in deze sectie maakt u een .NET Minimal Web API met behulp van de .NET CLI of Visual Studio 2022.

  1. Ga in de menubalk van Visual Studio naar File>NewProject>.

  2. Voer in het dialoogvenster ASP.NET in het zoekvak voor projectsjablonen in en selecteer het resultaat ASP.NET Core Web API. Kies Volgende onder aan het dialoogvenster.

  3. Voor de Project Naam, voer DotNetSQLin . Behoud de standaardwaarden voor de rest van de velden en selecteer Volgende.

  4. Selecteer voor het Framework .NET 10.0 en schakel Controllers gebruiken uit. In deze quickstart wordt een minimale API-sjabloon gebruikt om het maken en configureren van eindpunten te stroomlijnen.

  5. Kies Maken. Het nieuwe project wordt geopend in de Visual Studio-omgeving.

Entity Framework Core toevoegen aan het project

Om verbinding te maken met Azure SQL Database via .NET en Entity Framework Core, voeg je de volgende NuGet-pakketten toe aan je project met een van de volgende methoden:

  1. Klik in het venster Solution Explorer met de rechtermuisknop op het knooppunt Afhankelijkheden van het project en selecteer NuGet-pakketten beheren.

  2. Zoek in het resulterende venster naar EntityFrameworkCore. Zoek en installeer de volgende pakketten:

  • Microsoft.EntityFrameworkCore: Biedt essentiële Entity Framework Core-functionaliteit
  • Microsoft.EntityFrameworkCore.SqlServer: Biedt extra onderdelen om verbinding te maken met de logische server
  • Microsoft.EntityFrameworkCore.Design: biedt ondersteuning voor het uitvoeren van Entity Framework-migraties
  • Microsoft.EntityFrameworkCore.Tools: biedt ondersteuning voor Visual Studio Pakketbeheer Console-hulpprogramma's (alleen PowerShell)
  • Microsoft.AspNetCore.OpenApi: Optioneel - biedt ondersteuning voor het genereren van OpenAPI-documentatie
  • Swashbuckle.AspNetCore.SwaggerUI: Optioneel - biedt OpenAPI UI-interactie met de app-eindpunten

De code toevoegen om verbinding te maken met Azure SQL Database

De Entity Framework Core-bibliotheken zijn afhankelijk van de Microsoft.Data.SqlClient- en Azure.Identity-bibliotheken om verbindingen zonder wachtwoord met Azure SQL Database te implementeren. De Azure.Identity bibliotheek biedt een klasse met de naam DefaultAzureCredential die verificatie zonder wachtwoord naar Azure afhandelt.

DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke u tijdens runtime moet gebruiken. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokaal versus productie) zonder omgevingsspecifieke code te implementeren. In het overzicht van de Azure Identity-bibliotheek worden de volgorde en locaties uitgelegd waarin DefaultAzureCredential wordt gezocht naar referenties.

Voer de volgende stappen uit om verbinding te maken met Azure SQL Database met behulp van Entity Framework Core en de onderliggende DefaultAzureCredential klasse:

  1. Voeg een ConnectionStrings sectie toe aan het appsettings.Development.json bestand, zodat deze overeenkomt met de volgende code. Vervang <server>.database.windows.net door de naam van de databaseserver zonder wachtwoord waarmee u verbinding wilt maken en <database> door de naam van de database.

    {
        "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;"
        }
    }
    

    Opmerking

    Vergeet niet om de <your database-server-name> en <your-database-name> aanduidingen in de databaseverbindingsreeks bij te werken. Verbindingsreeksen zonder wachtwoord kunnen veilig worden doorgevoerd in broncodebeheer, omdat ze geen geheimen bevatten, zoals gebruikersnamen, wachtwoorden of toegangssleutels.

    De verbindingsreeks zonder wachtwoord bevat een configuratiewaarde van Authentication=Active Directory Default, waarmee Entity Framework Core verbinding kan maken DefaultAzureCredential met Azure-services. Wanneer de app lokaal wordt uitgevoerd, wordt deze geverifieerd met de gebruiker waarmee u bent aangemeld bij Visual Studio. Zodra de app in Azure wordt geïmplementeerd, detecteert en past dezelfde code de beheerde identiteit toe die is gekoppeld aan de gehoste app, die u later configureert.

  2. Vervang de inhoud van het bestand Program.cs door de volgende 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; }
    }
    

    De voorgaande code verwerkt de volgende stappen:

    • Haalt de verbindingsreeks voor de database zonder wachtwoord op uit het appsettings.Development.json bestand voor lokale ontwikkeling of uit de omgevingsvariabelen voor gehoste productiescenario's.
    • Registreert de Entity Framework Core-klasse DbContext met de .NET-afhankelijkheidsinjectiecontainer. Meer informatie vindt DbContext u in de aan de slag-documentatie voor Entity Framework Core.
    • Stelt .NET 10.0 OpenAPI-ondersteuning in met SwaggerUI om een gebruikersinterface te bieden die je kunt gebruiken om met de app-eindpunten en database te communiceren.
    • Voegt eindpunten toe om entiteiten in de database op te halen en toe te voegen.
    • Definieert een Person klasse die één record in de Persons databasetabel vertegenwoordigt en de PersonDbContext klasse die is geregistreerd bij de .NET-afhankelijkheidsinjectiecontainer.

De migraties uitvoeren om de database te maken

Om het databaseschema bij te werken zodat het overeenkomt met je datamodel met Entity Framework Core, gebruik je een migratie. Migraties kunnen een databaseschema maken en incrementeel bijwerken om dit gesynchroniseerd te houden met het gegevensmodel van uw toepassing. Voor meer informatie over dit patroon, zie het migratieoverzicht.

  1. Open een terminalvenster naar de hoofdmap van uw project.

  2. Voer de volgende opdracht uit om een initiële migratie te genereren waarmee de database kan worden gemaakt:

    Add-Migration InitialCreate
    
  3. Er moet een Migrations map in uw projectmap verschijnen, samen met een bestand InitialCreate waar unieke nummers aan vooraf zijn gegaan. Voer de migratie uit om de database te maken met behulp van de volgende opdracht en de Entity Framework Core-hulpprogramma's maken het databaseschema in Azure dat is gedefinieerd door de PersonDbContext klasse.

    Update-Database
    

De app lokaal testen

De app is klaar om lokaal te testen. Zorg ervoor dat je bent ingelogd op Visual Studio of de Azure CLI met hetzelfde account dat je als beheerder van je database hebt ingesteld.

  1. Selecteer de run-knop bovenaan Visual Studio om het API-project te starten.

  2. Op de Swagger UI-pagina (bijvoorbeeld https://localhost:<port>/swagger), vergroot de POST methode en selecteer Probeer het.

  3. Wijzig de voorbeeld-JSON om waarden op te nemen voor de voornaam en familienaam. Selecteer uitvoeren om een nieuwe record toe te voegen aan de database. De API retourneert een geslaagd antwoord.

    Schermopname van het testen van de API.

  4. Vouw de GET methode uit op de pagina Swagger UI en selecteer Uitproberen. Selecteer uitvoeren en de persoon die u zojuist hebt gemaakt, wordt geretourneerd.

Implementeren in Azure App Service

De app is klaar om te worden uitgezonden naar Azure. Visual Studio kan een Azure App Service maken en uw toepassing in één werkstroom implementeren.

  1. Zorg ervoor dat de app wordt gestopt en succesvol wordt opgebouwd.

  2. Klik in het Venster Solution Explorer van Visual Studio met de rechtermuisknop op het projectknooppunt op het hoogste niveau en selecteer Publiceren.

  3. Selecteer In het publicatiedialoogvenster Azure als het implementatiedoel en selecteer vervolgens Volgende.

  4. Voor het specifieke doel selecteert u Azure App Service (Windows) en selecteert u vervolgens Volgende.

  5. Selecteer het groene + pictogram om een nieuwe App Service te maken waarop u wilt implementeren en voer de volgende waarden in:

    • naam: laat de standaardwaarde staan.
    • abonnementsnaam: selecteer het abonnement waarnaar u wilt implementeren.
    • Resourcegroep: Selecteer Nieuw en maak een nieuwe resourcegroep met de naam msdocs-dotnet-sql.
    • Hostingabonnement: Selecteer Nieuw om het dialoogvenster hostingabonnement te openen. Laat de standaardwaarden staan en selecteer OK.
    • Selecteer Maken om het oorspronkelijke dialoogvenster te sluiten. Visual Studio maakt de App Service-resource in Azure.

    Schermopname van het implementeren met Visual Studio.

  6. Nadat de bron is aangemaakt, zorg je ervoor dat je deze selecteert in de lijst met App Services en selecteer je vervolgens Volgende.

  7. Schakel in de STAP API Management het selectievakje Deze stap overslaan onderaan in en selecteer Voltooien.

  8. Selecteer Publiceren in de rechterbovenhoek van het overzicht van het publicatieprofiel om de app in Azure te implementeren.

Wanneer de implementatie is voltooid, start Visual Studio de browser om de gehoste app weer te geven. Je ziet het Hello world bericht van het standaardeindpunt. Op dit moment werken de database-eindpunten echter niet correct in Azure. U moet nog steeds de beveiligde verbinding tussen de App Service en de SQL-database configureren om uw gegevens op te halen.

De App Service verbinden met Azure SQL Database

Om de App Service-instantie te verbinden met Azure SQL Database, voltooi je de volgende stappen:

  1. Maak een beheerde identiteit voor de App Service. De Microsoft.Data.SqlClient bibliotheek die in uw app is opgenomen, detecteert automatisch de beheerde identiteit, net zoals uw lokale Visual Studio-gebruiker.

  2. Maak een SQL-databasegebruiker en koppel deze aan de door App Service beheerde identiteit.

  3. Wijs SQL-rollen toe aan de databasegebruiker die lees-, schrijf- en mogelijk andere machtigingen toestaat.

Je kunt meerdere tools gebruiken om deze stappen te implementeren:

ServiceConnector is een hulpprogramma waarmee geverifieerde verbindingen tussen verschillende services in Azure worden gestroomlijnd. Service Connector ondersteunt momenteel het verbinden van een App Service met een SQL-database door gebruik te maken van de Azure CLI-extensie zonder wachtwoord.

  1. Installeer of upgrade de serviceconnector-extensie zonder wachtwoord:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Voer het az webapp connection create sql commando uit om je webapp met de database te verbinden door gebruik te maken van een door het systeem toegewezen beheerde identiteit. Vervang de tijdelijke aanduidingen door de juiste waarden:

    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
    

U kunt de wijzigingen controleren die door Service Connector zijn aangebracht in de App Service-instellingen.

  1. Ga naar de Identiteit-pagina van je App Service. Op het tabblad Systeem dat is toegewezen, moet de status zijn ingesteld op Op. Deze waarde betekent dat een door het systeem toegewezen beheerde identiteit is ingeschakeld voor uw app.

  2. Ga naar de configuratiepagina van je App Service. Op het tabblad Verbindingsreeksen ziet u een verbindingsreeks met de naam AZURE_SQL_CONNECTIONSTRING. Selecteer de tekst Klik om waarde te tonen om de gegenereerde wachtwoordloze verbindingsreeks weer te geven. De naam van deze verbindingsreeks komt overeen met de naam die u in uw app hebt geconfigureerd, zodat deze automatisch wordt gedetecteerd wanneer deze wordt uitgevoerd in Azure.

Belangrijk

Hoewel deze oplossing een basisaanpak biedt om te beginnen, is het geen best practice voor bedrijfsomgevingen. In die scenario's zou de app niet alle bewerkingen met één verheven identiteit moeten uitvoeren. Voer het principe van het minste privilege uit door meerdere identiteiten met specifieke rechten voor specifieke taken te configureren. Zie voor meer informatie over het configureren van databaserollen en -beveiliging:

De geïmplementeerde toepassing testen

Blader naar de URL van de app om te testen of de verbinding met Azure SQL Database werkt. U kunt de URL van uw app vinden op de overzichtspagina van App Service. Voeg het /person pad toe aan het einde van de URL om naar hetzelfde eindpunt te bladeren dat u lokaal hebt getest.

De persoon die u lokaal hebt gemaakt, moet worden weergegeven in de browser. Gefeliciteerd, uw toepassing is nu verbonden met Azure SQL Database in zowel lokale als gehoste omgevingen.

De middelen opschonen

Wanneer u klaar bent met het werken met de Azure SQL Database, verwijdert u de resource om onbedoelde kosten te voorkomen.

  1. Zoek in de zoekbalk van Azure Portal naar Azure SQL- en selecteer het overeenkomende resultaat.

  2. Zoek en selecteer uw database in de lijst met databases.

  3. Selecteer op de pagina Overzicht van uw Azure SQL Database Verwijderen.

  4. Op de Azure-pagina die wordt geopend, waar u zeker weet dat u wilt verwijderen..., voert u de naam van uw database in om te bevestigen en selecteer vervolgens Verwijderen.

Opmerking

Als je de voorbeeldapp naar Azure hebt geïmplementeerd, zorg er dan voor dat je ook de App Service-resource zoekt en verwijdert om onbedoelde kosten te voorkomen.