Nawiązywanie połączenia z usługą Azure SQL Database i wykonywanie zapytań względem usługi Azure SQL Database przy użyciu platformy .NET i programu Entity Framework Core

Dotyczy:Azure SQL Database

Ten szybki start opisuje, jak połączyć aplikację z bazą danych w Azure SQL Database i wykonywać zapytania za pomocą .NET i Entity Framework Core. Szybki start stosuje zalecane podejście bez użycia haseł do nawiązania połączenia z bazą danych. Aby dowiedzieć się więcej o połączeniach bezhasłowych, zobacz hub bez hasła.

Wymagania wstępne

Konfigurowanie serwera bazy danych

Bezpieczne, bez hasła połączenia z usługą Azure SQL Database wymagają pewnych konfiguracji bazy danych. Sprawdź następujące ustawienia na serwerze logicznym na platformie Azure , aby prawidłowo nawiązać połączenie z usługą Azure SQL Database w środowiskach lokalnych i hostowanych:

  1. W przypadku lokalnych połączeń programistycznych upewnij się, że serwer logiczny Usługi Azure SQL jest skonfigurowany tak, aby umożliwić nawiązywanie połączenia z adresem IP komputera lokalnego i innymi usługami platformy Azure:

    1. W witrynie Azure Portal w menu zasobów w obszarze Zabezpieczenia wybierz pozycję Sieć.

    2. Wybierz przycisk Wybrane sieci , aby wyświetlić dodatkowe opcje konfiguracji.

    3. Wybierz pozycję Dodaj adres IPv4 klienta (xx.xx.xx.xx.xx ), aby dodać regułę zapory, która umożliwi połączenia z adresu IPv4 komputera lokalnego. Alternatywnie możesz również wybrać + Dodaj regułę zapory, aby wprowadzić konkretny wybrany adres IP.

    4. Upewnij się, że pole wyboru Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera jest zaznaczone.

      Zrzut ekranu z witryny Azure Portal przedstawiający sposób konfigurowania reguł zapory serwera logicznego Azure SQL.

      Ostrzeżenie

      Włączenie opcji Zezwalaj usługom i zasobom platformy Azure na dostęp do tego ustawienia serwera nie jest zalecaną praktyką zabezpieczeń w scenariuszach produkcyjnych. Rzeczywiste aplikacje powinny implementować bezpieczniejsze podejścia, takie jak silniejsze ograniczenia zapory lub konfiguracje sieci wirtualnej.

      Więcej informacji na temat konfiguracji zabezpieczeń bazy danych można uzyskać w następujących zasobach:

  2. Serwer musi również mieć włączone uwierzytelnianie Microsoft Entra i mieć przypisane konto administratora firmy Microsoft Entra. W przypadku połączeń do lokalnego środowiska programistycznego, konto administratorskie Microsoft Entra powinno być kontem, na które możesz się również zalogować w programie Visual Studio lub lokalnie w interfejsie wiersza polecenia platformy Azure. Możesz zweryfikować, czy na serwerze logicznym jest włączone uwierzytelnianie Microsoft Entra na stronie Microsoft Entra ID.

    Zrzut ekranu przedstawiający sposób włączania uwierzytelniania w usłudze Microsoft Entra.

  3. Jeśli używasz osobistego konta platformy Azure, upewnij się, że masz skonfigurowaną usługę Microsoft Entra dla Azure SQL Database, aby przypisać swoje konto jako administratora serwera. Jeśli używasz konta firmowego, Microsoft Entra ID najprawdopodobniej jest już skonfigurowane.

Tworzenie projektu

Kroki opisane w tej sekcji umożliwiają utworzenie minimalnego internetowego interfejsu API platformy .NET przy użyciu interfejsu wiersza polecenia platformy .NET lub programu Visual Studio 2022.

  1. Na pasku menu programu Visual Studio wybierz Plik>Nowy>Projekt.

  2. W oknie dialogowym wpisz ASP.NET pole wyszukiwania szablonu projektu i wybierz wynik ASP.NET Core Web API. Wybierz pozycję Dalej w dolnej części okna dialogowego.

  3. Aby wybrać nazwę Project, wpisz DotNetSQL. Zachowaj wartości domyślne pozostałych pól i wybierz pozycję Dalej.

  4. W polu Framework wybierz .NET 10.0 i odznacz opcję Use controllers. W tym Szybkim starcie użyto szablonu Minimal API w celu usprawnienia tworzenia i konfigurowania punktu końcowego.

  5. Wybierz pozycję Utwórz. Nowy projekt zostanie otwarty w środowisku programu Visual Studio.

Dodawanie programu Entity Framework Core do projektu

Aby połączyć się z Azure SQL Database za pomocą .NET i Entity Framework Core, dodaj do swojego projektu następujące pakiety NuGet, używając jednej z następujących metod:

  1. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł Zależności projektu i wybierz polecenie Zarządzaj pakietami NuGet.

  2. W wyświetlonym oknie wyszukaj wartość EntityFrameworkCore. Znajdź i zainstaluj następujące pakiety:

  • Microsoft.EntityFrameworkCore: Udostępnia podstawowe funkcje programu Entity Framework Core
  • Microsoft.EntityFrameworkCore.SqlServer: Udostępnia dodatkowe składniki do nawiązywania połączenia z serwerem logicznym
  • Microsoft.EntityFrameworkCore.Design: zapewnia obsługę uruchamiania migracji programu Entity Framework
  • Microsoft.EntityFrameworkCore.Tools: zapewnia obsługę narzędzi konsoli programu Visual Studio Menedżer pakietów (tylko program PowerShell)
  • Microsoft.AspNetCore.OpenApi: Opcjonalne – zapewnia wsparcie dla generowania dokumentacji OpenAPI
  • Swashbuckle.AspNetCore.SwaggerUI: Opcjonalne – zapewnia interakcję interfejsu OpenAPI z endpointami aplikacji

Dodawanie kodu w celu nawiązania połączenia z usługą Azure SQL Database

Biblioteki Platformy Entity Framework Core bazują na bibliotekach Microsoft.Data.SqlClient i, Azure.Identity aby zaimplementować połączenia bez hasła z usługą Azure SQL Database. Biblioteka Azure.Identity udostępnia klasę o nazwie DefaultAzureCredential , która obsługuje uwierzytelnianie bez hasła na platformie Azure.

DefaultAzureCredential obsługuje wiele metod uwierzytelniania i określa, które z nich mają być używane w czasie wykonywania. Takie podejście umożliwia aplikacji używanie różnych metod uwierzytelniania w różnych środowiskach (lokalnych i produkcyjnych) bez implementowania kodu specyficznego dla środowiska. Omówienie biblioteki tożsamości platformy Azure wyjaśnia kolejność i lokalizacje, w których DefaultAzureCredential szuka poświadczeń.

Wykonaj następujące kroki, aby nawiązać połączenie z usługą Azure SQL Database przy użyciu platformy Entity Framework Core i podstawowej DefaultAzureCredential klasy:

  1. Dodaj sekcję ConnectionStrings do appsettings.Development.json pliku, aby była zgodna z poniższym kodem. Zastąp <server>.database.windows.net ciąg nazwą serwera bazy danych bez hasła, z którym chcesz nawiązać połączenie, i <database> nazwą bazy danych.

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

    Uwaga

    Pamiętaj, aby zaktualizować zastępcze <your database-server-name> i <your-database-name> w parametrach połączenia z bazą danych. Parametry połączenia pozbawione haseł mogą być bezpiecznie zatwierdzane w systemie kontroli wersji, ponieważ nie zawierają żadnych danych poufnych, takich jak nazwy użytkowników, hasła lub klucze dostępu.

    Parametry połączenia bez hasła zawierają wartość konfiguracji Authentication=Active Directory Default, która umożliwia programowi Entity Framework Core użycie DefaultAzureCredential do łączenia się z usługami platformy Azure. Gdy aplikacja jest uruchamiana lokalnie, uwierzytelnia się przy użyciu użytkownika, za pomocą którego logujesz się do programu Visual Studio. Po wdrożeniu aplikacji na platformie Azure ten sam kod odnajduje i stosuje tożsamość zarządzaną skojarzona z hostowaną aplikacją, którą skonfigurujesz później.

  2. Zastąp zawartość pliku Program.cs następującym kodem:

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

    Powyższy kod obsługuje następujące kroki:

    • Pobiera łańcuch połączenia z bazą danych bez hasła z pliku appsettings.Development.json na potrzeby lokalnego programowania lub ze zmiennych środowiskowych dla hostowanych scenariuszy produkcyjnych.
    • Rejestruje klasę Entity Framework Core DbContext w kontenerze iniekcji zależności platformy .NET. Więcej informacji DbContext można uzyskać w dokumentacji Wprowadzenie dla programu Entity Framework Core.
    • Konfiguruje obsługę OpenAPI w platformie .NET 10.0 za pomocą Swagger UI, udostępniając interfejs użytkownika, który umożliwia interakcję z punktami końcowymi aplikacji i bazą danych.
    • Dodaje punkty końcowe do pobierania i dodawania jednostek w bazie danych.
    • Definiuje klasę Person reprezentującą pojedynczy rekord w tabeli bazy danych oraz Persons klasę zarejestrowaną w PersonDbContext kontenerze iniekcji zależności platformy .NET.

Uruchamianie migracji w celu utworzenia bazy danych

Aby zaktualizować schemat bazy danych tak, aby pasował do modelu danych za pomocą Entity Framework Core, użyj migracji. Migracje mogą tworzyć i przyrostowo aktualizować schemat bazy danych, aby zachować synchronizację z modelem danych aplikacji. Aby dowiedzieć się więcej o tym wzorcu, zobacz przegląd migracji.

  1. Otwórz okno terminalu w katalogu głównym projektu.

  2. Uruchom następujące polecenie, aby wygenerować początkową migrację, która może utworzyć bazę danych:

    Add-Migration InitialCreate
    
  3. Folder Migrations powinien pojawić się w katalogu projektu, wraz z plikiem nazwanym InitialCreate z unikatowymi liczbami dodanymi na początku. Uruchom migrację, aby utworzyć bazę danych przy użyciu następującego polecenia, a narzędzie Entity Framework Core tworzy schemat bazy danych na platformie Azure zdefiniowany przez klasę PersonDbContext .

    Update-Database
    

Lokalne przetestowanie aplikacji

Aplikacja jest gotowa do testów lokalnych. Upewnij się, że jesteś zalogowany do Visual Studio lub Azure CLI z tym samym kontem, które ustawiłeś jako administratora swojej bazy danych.

  1. Wybierz przycisk run na górze Visual Studio, aby uruchomić projekt API.

  2. Na stronie Swagger UI (na przykład https://localhost:<port>/swagger) rozwiń metodę POST i wybierz Wypróbuj.

  3. Zmodyfikuj przykładowy kod JSON, aby uwzględnić wartości dla imienia i nazwiska rodziny. Wybierz pozycję Wykonaj , aby dodać nowy rekord do bazy danych. API zwraca pomyślną odpowiedź.

    Zrzut ekranu przedstawiający sposób testowania interfejsu API.

  4. Rozwiń metodę GET na stronie Swagger UI i wybierz pozycję Wypróbuj. Wybierz Wykonaj, a osoba, którą właśnie utworzyłeś, zostanie zwrócona.

Wdrażanie w usłudze Azure App Service

Aplikacja jest gotowa do wdrożenia na Azure. Visual Studio może utworzyć usługę aplikacyjną platformy Azure oraz wdrożyć Twoją aplikację w ramach jednego przepływu pracy.

  1. Upewnij się, że aplikacja jest zatrzymana i kompiluje się pomyślnie.

  2. W oknie Eksplorator rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy węzeł projektu najwyższego poziomu i wybierz pozycję Publikuj.

  3. W oknie dialogowym publikowania wybierz pozycję Azure jako element docelowy wdrożenia, a następnie wybierz pozycję Dalej.

  4. Dla określonego elementu docelowego wybierz Azure App Service (Windows), a następnie wybierz Dalej.

  5. Wybierz zieloną + ikonę, aby utworzyć nową usługę App Service do wdrożenia, a następnie wprowadź następujące wartości:

    • Nazwa: pozostaw wartość domyślną.
    • Nazwa subskrypcji: wybierz subskrypcję, którą chcesz wdrożyć.
    • Grupa zasobów: wybierz pozycję Nowy i utwórz nową grupę zasobów o nazwie msdocs-dotnet-sql.
    • Plan hostingu: wybierz pozycję Nowy , aby otworzyć okno dialogowe planu hostingu. Pozostaw wartości domyślne i wybierz przycisk OK.
    • Wybierz pozycję Utwórz , aby zamknąć oryginalne okno dialogowe. Program Visual Studio tworzy zasób usługi App Service na platformie Azure.

    Zrzut ekranu przedstawiający sposób wdrażania za pomocą programu Visual Studio.

  6. Po utworzeniu zasobu upewnij się, że zaznaczyłeś go na liście usług aplikacyjnych, a następnie wybierz Następne.

  7. W kroku API Management zaznacz pole wyboru Pomiń ten krok u dołu, a następnie wybierz pozycję Zakończ.

  8. Wybierz pozycję Publikuj w prawym górnym rogu podsumowania profilu publikowania, aby wdrożyć aplikację na platformie Azure.

Po zakończeniu wdrażania program Visual Studio uruchamia przeglądarkę w celu wyświetlenia hostowanej aplikacji. Widzisz wiadomość Hello world z domyślnego punktu końcowego. Jednak w tym momencie punkty końcowe bazy danych nie działają poprawnie na platformie Azure. Nadal musisz skonfigurować bezpieczne połączenie między usługą App Service i bazą danych SQL, aby pobrać dane.

Łączenie usługi App Service z usługą Azure SQL Database

Aby połączyć instancję App Service z Azure SQL Database, wykonaj następujące kroki:

  1. Utwórz tożsamość zarządzaną dla usługi App Service. Biblioteka Microsoft.Data.SqlClient zawarta w Twojej aplikacji automatycznie odnajduje tożsamość zarządzaną, podobnie jak odnajduje lokalnego użytkownika programu Visual Studio.

  2. Utwórz użytkownika bazy danych SQL i skojarz ją z tożsamością zarządzaną usługi App Service.

  3. Przypisz role SQL do użytkownika bazy danych, który zezwala na odczyt, zapis i potencjalnie inne uprawnienia.

Możesz użyć wielu narzędzi do wdrożenia tych kroków:

Łącznik usług to narzędzie, które usprawnia uwierzytelnianie połączeń między różnymi usługami na platformie Azure. Service Connector obecnie obsługuje łączenie App Service z bazą danych SQL za pomocą rozszerzenia Azure CLI bez hasła.

  1. Zainstaluj lub zaktualizuj rozszerzenie bezhasłowe dla łącznika usługi:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Wykonaj az webapp connection create sql polecenie, aby połączyć aplikację webową z bazą danych, używając systemowo przypisanej tożsamości zarządzanej. Zastąp symbole zastępcze odpowiednimi wartościami:

    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żytkownik może zweryfikować zmiany wprowadzone przez łącznik usługi w ustawieniach aplikacji App Service.

  1. Przejdź na stronę Tożsamość dla usługi App Service. Na karcie Przypisane przez System stan powinien być ustawiony na Włączone. Ta wartość oznacza, że tożsamość zarządzana przypisana przez system została włączona dla aplikacji.

  2. Przejdź do strony Konfiguracja dla swojej usługi aplikacji. Na karcie Parametry połączenia powinny zostać wyświetlone parametry połączenia o nazwie AZURE_SQL_CONNECTIONSTRING. Wybierz pozycję Kliknij, aby wyświetlić wartość, aby wyświetlić wygenerowany ciąg połączeniowy bez hasła. Nazwa tych parametrów połączenia jest zgodna z nazwą skonfigurowaną w aplikacji, dzięki czemu jest ona wykrywana automatycznie podczas uruchamiania na platformie Azure.

Ważne

Chociaż to rozwiązanie stanowi podstawowe podejście do rozpoczęcia pracy, nie jest najlepszą praktyką dla środowisk produkcyjnych w przedsiębiorstwie. W takich sytuacjach aplikacja nie powinna wykonywać wszystkich operacji przy użyciu jednej tożsamości z podwyższonymi uprawnieniami. Wprowadź zasadę najmniejszych uprawnień, konfigurując wiele tożsamości z konkretnymi uprawnieniami do konkretnych zadań. Aby uzyskać więcej informacji na temat konfigurowania ról i zabezpieczeń bazy danych, zobacz:

Testowanie wdrożonej aplikacji

Przejdź do adresu URL aplikacji, aby sprawdzić, czy połączenie z usługą Azure SQL Database działa. Adres URL aplikacji można znaleźć na stronie przeglądu usługi App Service. Dołącz ścieżkę /person na końcu adresu URL, aby przejść do tego samego punktu końcowego, który przetestowano lokalnie.

Osoba utworzona lokalnie powinna być wyświetlana w przeglądarce. Gratulacje, twoja aplikacja jest teraz połączona z usługą Azure SQL Database zarówno w środowiskach lokalnych, jak i hostowanych.

Oczyszczanie zasobów

Po zakończeniu pracy z usługą Azure SQL Database usuń zasób, aby uniknąć niezamierzonych kosztów.

  1. Na pasku wyszukiwania w witrynie Azure Portal wyszukaj ciąg Azure SQL i wybierz pasujący wynik.

  2. Znajdź i wybierz bazę danych na liście baz danych.

  3. Na stronie Przegląd usługi Azure SQL Database wybierz pozycję Usuń.

  4. Na platformie Azure na pewno chcesz usunąć otwieraną stronę, wpisz nazwę bazy danych, aby potwierdzić, a następnie wybierz pozycję Usuń.

Uwaga

Jeśli wdrożyłeś przykładową aplikację na Azure, upewnij się, że wyszukasz i usuniesz również zasób App Service, aby uniknąć niezamierzonych kosztów.