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
W tym przewodniku Szybki start opisano sposób łączenia aplikacji z bazą danych w usłudze Azure SQL Database i wykonywania zapytań przy użyciu platformy .NET i platformy Entity Framework Core. Szybki start stosuje zalecane podejście bez użycia haseł do nawiązania połączenia z bazą danych. Więcej informacji na temat połączeń bez hasła można uzyskać w centrum bez hasła.
Wymagania wstępne
- Subskrypcja platformy Azure.
- Baza danych SQL skonfigurowana do uwierzytelniania przy użyciu identyfikatora Entra firmy Microsoft (dawniej Azure Active Directory). Możesz go utworzyć, korzystając z przewodnika szybkiego startu tworzenia bazy danych.
- .NET 7.0 lub nowszy.
- Program Visual Studio lub nowszy z obciążeniem tworzenia aplikacji internetowych i ASP.NET.
- Najnowsza wersja Azure CLI.
- Najnowsza wersja narzędzi Entity Framework Core:
- Użytkownicy programu Visual Studio powinni zainstalować narzędzia konsoli Menedżer pakietów dla platformy Entity Framework Core.
- Użytkownicy interfejsu wiersza polecenia platformy .NET powinni zainstalować narzędzia interfejsu wiersza polecenia platformy .NET dla platformy Entity Framework Core.
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:
W przypadku lokalnych połączeń programistycznych upewnij się, że serwer logiczny jest skonfigurowany tak, aby zezwolić na nawiązywanie połączenia z adresem IP komputera lokalnego i innymi usługami platformy Azure:
Przejdź do strony Sieć serwera.
Przełącz przycisk radiowy Wybrane sieci, aby wyświetlić dodatkowe opcje konfiguracji.
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.
Upewnij się, że pole wyboru Zezwalaj usługom i zasobom platformy Azure na dostęp do tego serwera jest zaznaczone.
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:
- Konfigurowanie reguł zapory usługi Azure SQL Database.
- Konfigurowanie sieci wirtualnej z prywatnymi punktami końcowymi.
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.
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.
Na pasku menu programu Visual Studio przejdź do pozycji Plik>nowy>projekt...
W oknie dialogowym wprowadź ASP.NET w polu wyszukiwania szablonu projektu i wybierz wynik ASP.NET Core Web API. Wybierz pozycję Dalej w dolnej części okna dialogowego.
W polu Nazwa projektu wprowadź wartość DotNetSQL. Pozostaw wartości domyślne pozostałych pól i wybierz pozycję Dalej.
W obszarze Framework wybierz pozycję .NET 7.0 i usuń zaznaczenie pola wyboru Użyj kontrolerów (usuń zaznaczenie, aby używać minimalnych interfejsów API).. W tym Szybkim starcie użyto szablonu Minimal API w celu usprawnienia tworzenia i konfigurowania punktu końcowego.
Wybierz pozycję Utwórz. Nowy projekt zostanie otwarty w środowisku programu Visual Studio.
Dodawanie programu Entity Framework Core do projektu
Aby nawiązać połączenie z usługą Azure SQL Database przy użyciu platformy .NET i programu Entity Framework Core, należy dodać do projektu trzy pakiety NuGet przy użyciu jednej z następujących metod:
W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł Zależności projektu i wybierz polecenie Zarządzaj pakietami NuGet.
W wyświetlonym oknie wyszukaj wartość EntityFrameworkCore. Znajdź i zainstaluj następujące pakiety:
- Microsoft.EntityFrameworkCore: zapewnia 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 Menedżera pakietów programu Visual Studio (tylko PowerShell)
Alternatywnie możesz również uruchomić Install-Package
cmdlet w oknie Konsoli Menedżera pakietów:
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Tools
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:
Dodaj sekcję
ConnectionStrings
doappsettings.Development.json
pliku, aby była zgodna z poniższym kodem. Pamiętaj, aby zaktualizować<your database-server-name>
i<your-database-name>
symbole zastępcze.Parametry połączenia bez hasła zawierają wartość konfiguracji
Authentication=Active Directory Default
, która umożliwia programowi Entity Framework Core użycieDefaultAzureCredential
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.Uwaga
Parametry połączenia bez haseł są bezpieczne do umieszczania w systemie kontroli wersji, ponieważ nie zawierają żadnych tajnych informacji, takich jak nazwy użytkowników, hasła lub klucze dostępu.
{ "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;" } }
Dodaj następujący kod do pliku
Program.cs
powyżej wiersza kodu, który czytavar app = builder.Build();
. Ten kod wykonuje następujące konfiguracje: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.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));
Dodaj następujące punkty końcowe na koniec pliku
Program.cs
powyżejapp.Run()
, aby pobrać i dodać encje w bazie danych przy użyciu klasyPersonDbContext
.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();
Na koniec dodaj
Person
klasy iPersonDbContext
do dołuProgram.cs
pliku. Klasa Person reprezentuje pojedynczy rekord w tabeli bazy danychPersons
. KlasaPersonDbContext
reprezentuje bazę danych Person i umożliwia wykonywanie na niej operacji za pomocą kodu. Więcej informacjiDbContext
można uzyskać w dokumentacji Wprowadzenie dla programu 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; } }
Uruchamianie migracji w celu utworzenia bazy danych
Aby zaktualizować schemat bazy danych tak, aby był zgodny z modelem danych przy użyciu programu Entity Framework Core, należy użyć migracji. Migracje mogą tworzyć i przyrostowo aktualizować schemat bazy danych, aby zachować synchronizację z modelem danych aplikacji. Więcej informacji na temat tego wzorca można uzyskać w omówieniu migracji.
Otwórz okno terminalu w katalogu głównym projektu.
Uruchom następujące polecenie, aby wygenerować początkową migrację, która może utworzyć bazę danych:
Add-Migration InitialCreate
Folder
Migrations
powinien pojawić się w katalogu projektu, wraz z plikiem nazwanymInitialCreate
z unikatowymi liczbami dodanymi na początku. Uruchom migrację, aby utworzyć bazę danych przy użyciu następującego polecenia:Update-Database
Narzędzia Platformy Entity Framework Core spowodują utworzenie schematu bazy danych na platformie Azure zdefiniowanego przez klasę
PersonDbContext
.
Lokalne przetestowanie aplikacji
Aplikacja jest gotowa do testowania lokalnie. Upewnij się, że logujesz się do programu Visual Studio lub interfejsu wiersza polecenia platformy Azure przy użyciu tego samego konta, które zostało ustawione jako administrator bazy danych.
Naciśnij przycisk Uruchom w górnej części programu Visual Studio, aby uruchomić projekt interfejsu API.
Na stronie Swagger UI rozwiń metodę POST i wybierz pozycję Wypróbuj.
Zmodyfikuj przykładowy kod JSON, aby uwzględnić wartości dla pierwszego i nazwiska. Wybierz pozycję Wykonaj , aby dodać nowy rekord do bazy danych. API zwraca pomyślną odpowiedź.
Rozwiń metodę GET na stronie interfejsu użytkownika programu Swagger i wybierz pozycję Wypróbuj. Wybierz pozycję Wykonaj, a utworzona osoba zostanie zwrócona.
Wdrażanie w usłudze Azure App Service
Aplikacja jest gotowa do wdrożenia na platformie Azure. Visual Studio może utworzyć usługę aplikacyjną platformy Azure oraz wdrożyć Twoją aplikację w ramach jednego przepływu pracy.
Upewnij się, że aplikacja została zatrzymana i została pomyślnie skompilowana.
W oknie Eksplorator rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy węzeł projektu najwyższego poziomu i wybierz pozycję Publikuj.
W oknie dialogowym publikowania wybierz pozycję Azure jako element docelowy wdrożenia, a następnie wybierz pozycję Dalej.
Dla określonego elementu docelowego wybierz Azure App Service (Windows), a następnie wybierz Dalej.
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.
Po utworzeniu zasobu upewnij się, że został wybrany na liście usług aplikacji, a następnie wybierz Dalej.
W kroku API Management zaznacz pole wyboru Pomiń ten krok u dołu, a następnie wybierz pozycję Zakończ.
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ę, aby wyświetlić hostowaną aplikację, ale w tym momencie aplikacja nie działa 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ć wystąpienie usługi App Service z usługą Azure SQL Database, wymagane są następujące kroki:
- Utwórz tożsamość zarządzaną dla usługi App Service. Biblioteka zawarta
Microsoft.Data.SqlClient
w aplikacji automatycznie odnajdzie tożsamość zarządzaną, podobnie jak w przypadku odnajdywania lokalnego użytkownika programu Visual Studio. - Utwórz użytkownika bazy danych SQL i skojarz ją z tożsamością zarządzaną usługi App Service.
- Przypisz role SQL do użytkownika bazy danych, który zezwala na odczyt, zapis i potencjalnie inne uprawnienia.
Dostępnych jest wiele narzędzi do implementowania następujących kroków:
Łącznik usług to narzędzie, które usprawnia uwierzytelnianie połączeń między różnymi usługami na platformie Azure. Usługa Connector obecnie obsługuje łączenie App Service z bazą danych SQL za pośrednictwem Azure CLI za pomocą polecenia az webapp connection create sql
. To pojedyncze polecenie kończy trzy kroki wymienione powyżej dla ciebie.
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.
Przejdź do strony 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.
Przejdź do strony Konfiguracja usługi App Service. Na karcie Ciągi połączenia, powinieneś zobaczyć ciąg 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 tego parametru połączenia jest zgodna z nazwą skonfigurowaną w aplikacji, więc zostanie on odnaleziony automatycznie podczas uruchamiania w Azure.
Ważne
Chociaż to rozwiązanie zapewnia proste podejście do rozpoczęcia pracy, nie jest to najlepsze rozwiązanie dla środowisk produkcyjnych przedsiębiorstwa. W tych scenariuszach aplikacja nie powinna wykonywać wszystkich operacji przy użyciu jednej tożsamości z podwyższonym poziomem uprawnień. Należy spróbować zaimplementować zasadę najniższych uprawnień, konfigurując wiele tożsamości z określonymi uprawnieniami dla określonych zadań.
Więcej informacji na temat konfigurowania ról bazy danych i zabezpieczeń można uzyskać w następujących zasobach:
Samouczek: zabezpieczanie bazy danych w usłudze Azure SQL Database
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! 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.
Na pasku wyszukiwania w witrynie Azure Portal wyszukaj ciąg Azure SQL i wybierz pasujący wynik.
Znajdź i wybierz bazę danych na liście baz danych.
Na stronie Przegląd usługi Azure SQL Database wybierz pozycję Usuń.
Na platformie Azure na pewno chcesz usunąć otwieraną stronę, wpisz nazwę bazy danych, aby potwierdzić, a następnie wybierz pozycję Usuń.