Ansluta till och fråga Azure SQL Database med hjälp av .NET och Entity Framework Core

gäller för:Azure SQL Database

Denna quickstart beskriver hur man kopplar en applikation till en databas i Azure SQL Database och utför frågor med hjälp av .NET och Entity Framework Core. Den här snabbstarten följer den rekommenderade metoden för lösenordsfri anslutning till databasen. För att lära dig mer om lösenordslösa anslutningar, se den lösenordslösa hubben.

Förutsättningar

Konfigurera databasservern

Säkra, lösenordslösa anslutningar till Azure SQL Database kräver vissa databaskonfigurationer. Kontrollera följande inställningar på din logiska servern i Azure för att ansluta korrekt till Azure SQL Database i både lokala och värdbaserade miljöer:

  1. För lokala utvecklingsanslutningar kontrollerar du att din logiska Azure SQL-server är konfigurerad så att din lokala dators IP-adress och andra Azure-tjänster kan ansluta:

    1. I Azure-portalen går du till resursmenyn under Säkerhet och väljer Nätverk.

    2. Välj knappen Valda nätverk för att visa ytterligare konfigurationsalternativ.

    3. Välj Lägg till din klient-IPv4-adress (xx.xx.xx.xx.xx) för att lägga till en brandväggsregel som aktiverar anslutningar från din lokala IPv4-adress. Du kan också välja + Lägg till en brandväggsregel för att ange en specifik IP-adress.

    4. Kontrollera att kryssrutan Tillåt Att Azure-tjänster och resurser får åtkomst till den här servern är markerad.

      Skärmbild från Azure-portalen som visar hur du konfigurerar brandväggsreglerna för den logiska Azure SQL-servern.

      Varning

      Att aktivera inställningen Tillåt Azure-tjänster och resurser att komma åt den här servern är inte en rekommenderad säkerhetspraxis för produktionsscenarier. Verkliga program bör implementera säkrare metoder, till exempel starkare brandväggsbegränsningar eller konfigurationer av virtuella nätverk.

      Du kan läsa mer om databassäkerhetskonfigurationer på följande resurser:

  2. Servern måste också ha Microsoft Entra-autentisering aktiverat och ha ett Microsoft Entra-administratörskonto tilldelat. För lokala utvecklingsanslutningar ska Microsoft Entra-administratörskontot vara ett konto som du också kan logga in på Visual Studio eller Azure CLI med lokalt. Du kan kontrollera om din server har Microsoft Entra-autentisering aktiverat på sidan Microsoft Entra-ID på den logiska servern.

    En skärmbild som visar hur du aktiverar Microsoft Entra-autentisering.

  3. Om du använder ett personligt Azure-konto kontrollerar du att du har Microsoft Entra-konfiguration och konfigurerat för Azure SQL Database för att tilldela ditt konto som serveradministratör. Om du använder ett företagskonto är Microsoft Entra-ID förmodligen redan konfigurerat åt dig.

Skapa projektet

Stegen i det här avsnittet skapar ett .NET Minimalt webb-API med hjälp av antingen .NET CLI eller Visual Studio 2022.

  1. I menyfältet för Visual Studio, gå till File>NewProject>.

  2. I dialogfönstret anger du ASP.NET i sökrutan för projektmallar och väljer resultatet ASP.NET Core Web API. Välj Nästa längst ned i dialogrutan.

  3. För Project Name, ange DotNetSQL. Behåll standardvärdena för resten av fälten och välj Nästa.

  4. För ramverket, välj .NET 10.0 och avmarkera Använd kontroller. Den här snabbstarten använder en minimal API-mall för att effektivisera skapandet och konfigurationen av slutpunkter.

  5. Välj Skapa. Det nya projektet öppnas i Visual Studio-miljön.

Lägga till Entity Framework Core i projektet

För att ansluta till Azure SQL Database genom att använda .NET och Entity Framework Core, lägg till följande NuGet-paket i ditt projekt med en av följande metoder:

  1. I Prieskumník riešení-fönstret, högerklicka på projektets nod Beroenden och välj Hantera NuGet-paket.

  2. I det resulterande fönstret söker du efter EntityFrameworkCore. Leta upp och installera följande paket:

  • Microsoft.EntityFrameworkCore: Tillhandahåller viktiga Entity Framework Core-funktioner
  • Microsoft.EntityFrameworkCore.SqlServer: Tillhandahåller extra komponenter för att ansluta till den logiska servern
  • Microsoft.EntityFrameworkCore.Design: Ger stöd för att köra Entity Framework-migreringar
  • Microsoft.EntityFrameworkCore.Tools: Ger stöd för Visual Studio Správca balíkov-konsolverktyg (endast PowerShell)
  • Microsoft.AspNetCore.OpenApi: Valfritt – erbjuder stöd för generering av OpenAPI-dokumentation
  • Swashbuckle.AspNetCore.SwaggerUI: Valfritt – tillhandahåller OpenAPI UI-interaktion med appens endpoints

Lägg till koden för att ansluta till Azure SQL Database

Entity Framework Core-biblioteken förlitar sig på biblioteken Microsoft.Data.SqlClient och Azure.Identity för att implementera lösenordslösa anslutningar till Azure SQL Database. Biblioteket Azure.Identity innehåller en klass som heter DefaultAzureCredential som hanterar lösenordslös autentisering till Azure.

DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod. Översikt över Azure Identity-bibliotek förklarar ordningen och platserna där DefaultAzureCredential söker efter autentiseringsuppgifter.

Slutför följande steg för att ansluta till Azure SQL Database med Entity Framework Core och den underliggande DefaultAzureCredential-klassen:

  1. Lägg till ett ConnectionStrings avsnitt i appsettings.Development.json-filen så att den matchar följande kod. Ersätt <server>.database.windows.net med namnet på den lösenordslösa databasserver som du vill ansluta till och <database> med namnet på databasen.

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

    Anmärkning

    Kom ihåg att uppdatera <your database-server-name> platshållarna och <your-database-name> i databasanslutningssträngen. Lösenordslösa anslutningssträngar är säkra att checka in på källkontrollen, eftersom de inte innehåller några hemligheter som användarnamn, lösenord eller åtkomstnycklar.

    Den lösenordslösa anslutningssträngen innehåller konfigurationsvärdet Authentication=služba Active Directory Default, som gör att Entity Framework Core kan använda DefaultAzureCredential för att ansluta till Azure-tjänster. När appen körs lokalt autentiseras den med den användare som du är inloggad i Visual Studio med. När appen har distribuerats till Azure identifierar och tillämpar samma kod den hanterade identitet som är associerad med den värdbaserade appen, som du konfigurerar senare.

  2. Ersätt innehållet i Program.cs-filen med följande kod:

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

    Föregående kod hanterar följande steg:

    • Hämtar den lösenordslösa databasanslutningssträngen från appsettings.Development.json-filen för lokal utveckling eller från miljövariablerna för värdbaserade produktionsscenarier.
    • Registrerar Entity Framework Core-klassen DbContext med .NET-beroendeinmatningscontainern. Du kan läsa mer om DbContext i dokumentationen Komma igång för Entity Framework Core.
    • Konfigurerar .NET 10.0 OpenAPI-stöd med SwaggerUI för att tillhandahålla ett gränssnitt du kan använda för att interagera med appens endpoints och databas.
    • Lägger till slutpunkter för att hämta och lägga till entiteter i databasen.
    • Definierar en Person klass som representerar en enskild post i databastabellen Persons och den PersonDbContext klass som registrerades med .NET-beroendeinmatningscontainern.

Kör migreringarna för att skapa databasen

För att uppdatera databasschemat så att det matchar din datamodell med Entity Framework Core, använd en migrering. Migreringar kan skapa och stegvis uppdatera ett databasschema för att hålla det synkroniserat med programmets datamodell. För att lära dig mer om detta mönster, se migrationsöversikten.

  1. Öppna ett terminalfönster till projektets rot.

  2. Kör följande kommando för att generera en inledande migrering som kan skapa databasen:

    Add-Migration InitialCreate
    
  3. En Migrations-mapp bör visas i din projektkatalog, tillsammans med en fil som heter InitialCreate med unika nummer tillagda i början. Kör migreringen för att skapa databasen med hjälp av följande kommando, och Entity Framework Core-verktyget skapar databasschemat i Azure som definierats av PersonDbContext klassen.

    Update-Database
    

Testa appen lokalt

Appen är redo att testas lokalt. Se till att du är inloggad på Visual Studio eller Azure CLI med samma konto som du ställde in som administratör för din databas.

  1. Välj kör-knappen högst upp i Visual Studio för att starta API-projektet.

  2. På Swagger UI-sidan (till exempel https://localhost:<port>/swagger), expandera POST metoden och välj Försök det.

  3. Ändra JSON-exemplet så att det innehåller värden för förnamnet och familjenamnet. Välj Kör för att lägga till en ny post i databasen. API:et returnerar ett lyckat svar.

    Skärmbild som visar hur du testar API:et.

  4. GET Expandera metoden på swagger-användargränssnittssidan och välj Prova. Välj Köroch den person som du nyss skapade returneras.

Distribuera till Azure App Service

Appen är redo att distribueras till Azure. Visual Studio kan skapa en Azure App Service och distribuera ditt program i ett enda arbetsflöde.

  1. Se till att appen stoppas och byggs framgångsrikt.

  2. Högerklicka på projektnoden på den översta nivån i Prieskumník riešení i Visual Studio och välj Publicera.

  3. I publiceringsdialogrutan väljer du Azure som distributionsmål och väljer sedan Nästa.

  4. För det specifika målet väljer du Azure App Service (Windows)och väljer sedan Nästa.

  5. Välj den gröna +-ikonen för att skapa en ny App Service att distribuera till och ange följande värden:

    • Namn: Lämna standardvärdet.
    • Prenumerationsnamn: Välj den prenumeration som du vill distribuera till.
    • Resursgrupp: Välj Ny och skapa en ny resursgrupp med namnet msdocs-dotnet-sql.
    • Värdplan: Välj Ny för att öppna dialogrutan värdplan. Lämna standardvärdena och välj OK.
    • Välj Skapa för att stänga den ursprungliga dialogrutan. Visual Studio skapar App Service-resursen i Azure.

    Skärmbild som visar hur du distribuerar med Visual Studio.

  6. Efter att resursen har skapats, se till att du väljer den i listan över apptjänster och välj sedan Nästa.

  7. I steget API Management markerar du kryssrutan Hoppa över det här steget längst ned och väljer sedan Slutför.

  8. Välj Publicera längst upp till höger i sammanfattningen av publiceringsprofilen för att distribuera appen till Azure.

När distributionen är klar startar Visual Studio webbläsaren för att visa den värdbaserade appen. Du ser meddelandet Hello world från standardändpunkten. I det här läget fungerar dock inte databasslutpunkterna korrekt i Azure. Du måste fortfarande konfigurera den säkra anslutningen mellan App Service och SQL-databasen för att hämta dina data.

Ansluta App Service till Azure SQL Database

För att koppla App Service-instansen till Azure SQL Database, utför följande steg:

  1. Skapa en hanterad identitet för App Service. Biblioteket Microsoft.Data.SqlClient som ingår i din app identifierar automatiskt den hanterade identiteten, precis som den upptäckte din lokala Visual Studio-användare.

  2. Skapa en SQL-databasanvändare och associera den med den hanterade App Service-identiteten.

  3. Tilldela SQL-roller till databasanvändaren som tillåter läs-, skriv- och potentiellt andra behörigheter.

Du kan använda flera verktyg för att genomföra dessa steg:

Service Connector är ett verktyg som effektiviserar autentiserade anslutningar mellan olika tjänster i Azure. Service Connector stöder för närvarande anslutning av en App Service till en SQL-databas genom att använda Azure CLI-tillägget utan lösenord.

  1. Installera eller uppgradera det lösenordslösa tillägget för Service Connector:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Kör kommandot az webapp connection create sql för att koppla din webbapp till databasen genom att använda en systemtilldelad hanterad identitet. Ersätt platshållarna med lämpliga värden:

    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
    

Du kan verifiera de ändringar som gjorts av Service Connector i App Service-inställningarna.

  1. Gå till sidan Identitet för din App Service. Under fliken Systemtilldelat bör Status anges till . Det här värdet innebär att en systemtilldelad hanterad identitet har aktiverats för din app.

  2. Gå till konfigurationssidan för din App Service. Under fliken Anslutningssträngar bör du se en anslutningssträng med namnet AZURE_SQL_CONNECTIONSTRING. Välj text Klicka för att visa värdet för att se den genererade anslutningssträngen utan lösenord. Namnet på den här anslutningssträngen överensstämmer med det som du har konfigurerat i din app, så att den identifieras automatiskt när den körs i Azure.

Viktigt!

Även om denna lösning ger en grundläggande metod för att komma igång, är det inte en bästa praxis för företagsmiljöer. I sådana scenarier bör appen inte utföra alla operationer med en enda, förhöjd identitet. Implementera principen om minsta privilegium genom att konfigurera flera identiteter med specifika behörigheter för specifika uppgifter. Mer information om hur du konfigurerar databasroller och säkerhet finns i:

Testa det distribuerade programmet

Bläddra till appens URL för att testa att anslutningen till Azure SQL Database fungerar. Du kan hitta url:en för din app på översiktssidan för App Service. Lägg till sökvägen /person i slutet av URL:en för att navigera till samma slutpunkt som du testade lokalt.

Den person som du skapade lokalt bör visas i webbläsaren. Grattis, ditt program är nu anslutet till Azure SQL Database i både lokala och värdbaserade miljöer.

Rensa resurserna

När du är klar med arbetet med Azure SQL Database tar du bort resursen för att undvika oavsiktliga kostnader.

  1. I sökfältet i Azure-portalen söker du efter Azure SQL- och väljer matchande resultat.

  2. Leta upp och välj databasen i listan över databaser.

  3. På sidan Översikt i Azure SQL Database väljer du Ta bort.

  4. Azure är du säker på att du vill ta bort... På sidan som öppnas, skriver du namnet på din databas för att bekräfta, och väljer sedan Ta bort.

Anmärkning

Om du distribuerade exempelappen till Azure, se till att du också söker efter och tar bort App Service-resursen för att undvika oavsiktliga kostnader.