Dela via


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

Gäller för:Azure SQL Database

Den här snabbstarten beskriver hur du ansluter ett program 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. Du kan lära dig mer om lösenordslösa anslutningar på 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å den logiska servern i Azure för att ansluta till Azure SQL Database korrekt i både lokala och värdbaserade miljöer:

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

    • Gå till sidan Nätverk på servern.

    • Växla alternativknappen Valda nätverk för att visa ytterligare konfigurationsalternativ.

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

    • Kontrollera att kryssrutan Tillåt Azure-tjänster och resurser att komma åt den här servern är markerad.

      A screenshot showing how to configure firewall rules.

      Varning

      Att aktivera inställningen Tillåt Azure-tjänster och resurser att komma åt den här serverinställningen ä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 för den logiska servern.

    A screenshot showing how to enable Microsoft Entra authentication.

  3. Om du använder ett personligt Azure-konto kontrollerar du att microsoft Entra har konfigurerats och konfigurerats 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 menyraden i Visual Studio går du till Arkiv>nytt>projekt...

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

  3. För Projektnamn anger du DotNetSQL. Lämna standardvärdena för resten av fälten och välj Nästa.

  4. För Ramverket väljer du .NET 7.0 och avmarkerar Använd kontrollanter (avmarkera om du vill använda minimala API:er). 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

Om du vill ansluta till Azure SQL Database med hjälp av .NET och Entity Framework Core måste du lägga till tre NuGet-paket i projektet med någon av följande metoder:

  1. I fönstret Solution Explorer högerklickar du på projektets nod Beroenden och väljer 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 ytterligare komponenter för att ansluta till den logiska servern
  • Microsoft.EntityFrameworkCore.Design: Ger stöd för att köra Entity Framework-migreringar

Du kan också köra cmdleten Install-Package i fönstret Package Manager Console :

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Design

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 med namnet 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. Översikten över Azure Identity Library förklarar ordningen och platserna där DefaultAzureCredential autentiseringsuppgifterna söks.

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. Kom ihåg att uppdatera <your database-server-name> platshållarna och <your-database-name> .

    Den lösenordslösa anslutningssträng innehåller konfigurationsvärdet Authentication=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.

    Kommentar

    Lösenordsfria anslutningssträng är säkra att checka in på källkontrollen, eftersom de inte innehåller några hemligheter som användarnamn, lösenord eller åtkomstnycklar.

    {
        "Logging": {
            "LogLevel": {
                "Default": "Information",
                "Microsoft.AspNetCore": "Warning"
            }
        },
        "ConnectionStrings": {
            "AZURE_SQL_CONNECTIONSTRING": "Data Source=passwordlessdbserver.database.windows.net;
                Initial Catalog=passwordlessdb; Authentication=Active Directory Default; Encrypt=True;"
        }
    }
    
  2. Lägg till följande kod i Program.cs filen ovanför den kodrad som läser var app = builder.Build();. Den här koden utför följande konfigurationer:

    • Hämtar den lösenordslösa databasen anslutningssträng 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.

      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));
      
  3. Lägg till följande slutpunkter längst ned i Program.cs filen ovan app.Run() för att hämta och lägga till entiteter i databasen med hjälp av PersonDbContext -klassen.

    app.MapGet("/Person", (PersonDbContext context) =>
    {
        return context.Person.ToList();
    })
    .WithName("GetPersons")
    .WithOpenApi();
    
    app.MapPost("/Person", (Person person, PersonDbContext context) =>
    {
        context.Add(person);
        context.SaveChanges();
    })
    .WithName("CreatePerson")
    .WithOpenApi();
    

    Lägg slutligen till klasserna Person och PersonDbContext längst ned i Program.cs filen. Klassen Person representerar en enskild post i databasens Persons tabell. Klassen PersonDbContext representerar databasen Person och gör att du kan utföra åtgärder på den via kod. Du kan läsa mer om DbContext i komma igång-dokumentationen för Entity Framework Core.

    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    
    public class PersonDbContext : DbContext
    {
        public PersonDbContext(DbContextOptions<PersonDbContext> options)
            : base(options)
        {
        }
    
        public DbSet<Person> Person { get; set; }
    }
    

Kör migreringarna för att skapa databasen

Om du vill uppdatera databasschemat så att det matchar datamodellen med Entity Framework Core måste du använda en migrering. Migreringar kan skapa och stegvis uppdatera ett databasschema för att hålla det synkroniserat med programmets datamodell. Du kan lära dig mer om det här mönstret i översikten över migreringar.

  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 projektkatalogen, tillsammans med en fil som heter InitialCreate med unika nummer i förväg. Kör migreringen för att skapa databasen med följande kommando:

    Update-Database
    

    Entity Framework Core-verktyget skapar databasschemat i Azure som definierats av PersonDbContext klassen.

Testa appen lokalt

Appen är redo att testas lokalt. Kontrollera att du är inloggad i Visual Studio eller Azure CLI med samma konto som du angav som administratör för databasen.

  1. Tryck på körningsknappen överst i Visual Studio för att starta API-projektet.

  2. På sidan Swagger-användargränssnitt expanderar du POST-metoden och väljer Prova.

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

    A screenshot showing how to test the API.

  4. Expandera GET-metoden på swagger-användargränssnittssidan och välj Prova. Välj Kör och 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. Kontrollera att appen har stoppats och att den har skapats.

  2. I Solution Explorer-fönstret i Visual Studio högerklickar du på projektnoden på den översta nivån och väljer 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 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.

      A screenshot showing how to deploy with Visual Studio.

  6. När resursen har skapats kontrollerar du att den är markerad i listan över apptjänster och väljer sedan Nästa.

  7. I steget API Management väljer 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, men i det här läget fungerar inte appen 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.

Anslut App Service till Azure SQL Database

Följande steg krävs för att ansluta App Service-instansen till Azure SQL Database:

  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.

Det finns flera tillgängliga verktyg för att implementera följande steg:

Tjänst Anslut eller är ett verktyg som effektiviserar autentiserade anslutningar mellan olika tjänster i Azure. Tjänst Anslut eller stöder för närvarande anslutning av en App Service till en SQL-databas via Azure CLI med hjälp av az webapp connection create sql kommandot . Det här enkla kommandot slutför de tre steg som nämns ovan åt dig.

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 kontrollera de ändringar som gjorts av Service Anslut eller i App Service-inställningarna.

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

  2. Gå till sidan Konfiguration för Din App Service. Under fliken Anslut ionssträngar bör du se en anslutningssträng med namnet AZURE_SQL_CONNECTIONSTRING. Välj klicka för att visa värdetexten för att visa den genererade lösenordslösa anslutningssträng. Namnet på den här anslutningssträng överensstämmer med det som du har konfigurerat i din app, så att det identifieras automatiskt när det körs i Azure.

Viktigt!

Även om den här lösningen är en enkel metod för att komma igång är det inte bästa praxis för företagsproduktionsmiljöer. I dessa scenarier bör appen inte utföra alla åtgärder med en enda upphöjd identitet. Du bör försöka implementera principen om lägsta behörighet genom att konfigurera flera identiteter med specifika behörigheter för specifika uppgifter.

Du kan läsa mer om hur du konfigurerar databasroller och säkerhet på följande resurser:

Självstudie: Skydda en databas i Azure SQL Database

Auktorisera databasåtkomst till SQL Database

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. /person Lägg till sökvägen i slutet av URL:en för att bläddra till samma slutpunkt som du testade lokalt.

Den person som du skapade lokalt bör visas i webbläsaren. Klar! 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. På den Azure-sida som du vill ta bort... som öppnas skriver du namnet på databasen för att bekräfta och väljer sedan Ta bort.

Nästa steg