Подключение к и запрос База данных SQL Azure с помощью .NET и Entity Framework Core

Применимо к: База данных SQL Azure

В этом кратком руководстве описывается подключение приложения к базе данных в База данных SQL Azure и выполнение запросов с помощью .NET и Entity Framework Core. В этом кратком руководстве описан рекомендуемый подход без пароля для подключения к базе данных. Дополнительные сведения о бессерверных подключениях можно узнать в центре без пароля.

Необходимые компоненты

Настройка сервера базы данных

Безопасные, бессерверные подключения к База данных SQL Azure требуют определенных конфигураций базы данных. Проверьте следующие параметры на логическом сервере в Azure, чтобы правильно подключиться к База данных SQL Azure в локальных и размещенных средах:

  1. Для локальных подключений разработки убедитесь, что логический сервер настроен, чтобы разрешить подключение ip-адреса локального компьютера и других служб Azure:

    • Перейдите на страницу "Сеть " сервера.

    • Переключите переключатель "Выбранные сети", чтобы отобразить дополнительные параметры конфигурации.

    • Выберите " Добавить ip-адрес клиента" (xx.xx.xx.xx.xx), чтобы добавить правило брандмауэра, которое будет включать подключения с адреса IPv4 локального компьютера. Кроме того, можно выбрать + Добавить правило брандмауэра, чтобы ввести конкретный IP-адрес.

    • Убедитесь, что установлен флажок разрешить службам и ресурсам Azure доступ к этому серверу .

      Снимок экрана: настройка правил брандмауэра.

      Предупреждение

      Включение доступа к этому параметру сервера служб и ресурсов Azure не является рекомендуемой практикой безопасности для рабочих сценариев. Реальные приложения должны реализовать более безопасные подходы, такие как более строгие ограничения брандмауэра или конфигурации виртуальной сети.

      Дополнительные сведения о конфигурациях безопасности базы данных см. в следующих ресурсах:

  2. На сервере также должна быть включена проверка подлинности Microsoft Entra и назначена учетная запись администратора Microsoft Entra. Для локальных подключений к разработке учетная запись администратора Microsoft Entra должна быть учетной записью, с помощью azure CLI или Visual Studio. Вы можете проверить, включена ли проверка подлинности Microsoft Entra на странице идентификатора Microsoft Entra на логическом сервере.

    Снимок экрана: включение проверки подлинности Microsoft Entra.

  3. Если вы используете личную учетную запись Azure, убедитесь, что настроена настройка Microsoft Entra и настроена для База данных SQL Azure, чтобы назначить свою учетную запись администратором сервера. Если вы используете корпоративную учетную запись, идентификатор Microsoft Entra, скорее всего, будет настроен для вас.

Создание проекта

В этом разделе описано, как создать минимальный веб-API .NET с помощью .NET CLI или Visual Studio 2022.

  1. В строке меню Visual Studio перейдите в раздел "Файл>нового>проекта..".

  2. В диалоговом окне введите ASP.NET в поле поиска шаблона проекта и выберите результат ASP.NET Core Web API. Нажмите Далее в нижней части диалогового окна.

  3. В поле "Имя проекта" введите DotNetSQL. Оставьте в остальных полях значения по умолчанию и выберите Далее.

  4. Для платформы выберите .NET 7.0 и снимите флажок Использовать контроллеры (снимите флажок, чтобы использовать минимальные API). В этом кратком руководстве используется шаблон МИНИМАЛЬНОго API для упрощения создания и настройки конечных точек.

  5. Выберите Создать. Новый проект открывается в среде Visual Studio.

Добавление Entity Framework Core в проект

Чтобы подключиться к База данных SQL Azure с помощью .NET и Entity Framework Core, необходимо добавить три пакета NuGet в проект с помощью одного из следующих методов:

  1. В окне Обозреватель решений щелкните правой кнопкой мыши узел зависимостей проекта и выберите пункт "Управление пакетами NuGet".

  2. В результирующем окне найдите EntityFrameworkCore. Найдите и установите следующие пакеты:

  • Microsoft.EntityFrameworkCore: предоставляет основные функциональные возможности Entity Framework Core
  • Microsoft.EntityFrameworkCore.SqlServer: предоставляет дополнительные компоненты для подключения к логическому серверу
  • Microsoft.EntityFrameworkCore.Design. Обеспечивает поддержку выполнения миграций Entity Framework

Кроме того, можно запустить Install-Package командлет в окне консоли диспетчер пакетов:

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

Добавление кода для подключения к База данных SQL Azure

Библиотеки Entity Framework Core используют Microsoft.Data.SqlClient библиотеки и Azure.Identity библиотеки для реализации бессерверных подключений к База данных SQL Azure. Библиотека Azure.Identity предоставляет класс DefaultAzureCredential , который обрабатывает проверку подлинности без пароля в Azure.

DefaultAzureCredential поддерживает несколько методов проверки подлинности и определяет, какие из них следует использовать во время выполнения. Такой подход позволяет приложению использовать различные способы проверки подлинности в разных средах (локальной и рабочей) без реализации кода для конкретной среды. Общие сведения о библиотеке удостоверений Azure объясняют порядок и расположения, в которых DefaultAzureCredential ищет учетные данные.

Выполните следующие действия, чтобы подключиться к База данных SQL Azure с помощью Entity Framework Core и базового DefaultAzureCredential класса:

  1. ConnectionStrings Добавьте раздел в appsettings.Development.json файл, чтобы он соответствовал следующему коду. Не забудьте обновить заполнители и <your-database-name> заполнители<your database-server-name>.

    Без пароля строка подключения включает значение Authentication=Active Directory Defaultконфигурации, позволяющее Entity Framework Core использовать DefaultAzureCredential для подключения к службам Azure. При локальном запуске приложение проходит проверку подлинности с помощью пользователя, с которым вы вошли в Visual Studio. После развертывания приложения в Azure тот же код обнаруживает и применяет управляемое удостоверение, связанное с размещенным приложением, которое будет настроено позже.

    Примечание.

    Без пароля строка подключения безопасно зафиксировать систему управления версиями, так как они не содержат никаких секретов, таких как имена пользователей, пароли или ключи доступа.

    {
        "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. Добавьте следующий код в Program.cs файл над строкой кода, которая считывает var app = builder.Build();. Этот код выполняет следующие конфигурации:

    • Извлекает базу данных без пароля строка подключения из appsettings.Development.json файла для локальной разработки или из переменных среды для размещенных рабочих сценариев.

    • Регистрирует класс Entity Framework Core DbContext в контейнере внедрения зависимостей .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));
      
  3. Добавьте следующие конечные точки в нижней части Program.cs файла выше app.Run() , чтобы получить и добавить сущности в базу данных с помощью PersonDbContext класса.

    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();
    

    Наконец, добавьте и PersonDbContext классы Person в нижней Program.cs части файла. Класс Person представляет одну запись в таблице базы данных Persons . Класс PersonDbContext представляет базу данных Person и позволяет выполнять операции с ним с помощью кода. Дополнительные сведения см DbContext . в документации по началу работы для 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; }
    }
    

Запуск миграций для создания базы данных

Чтобы обновить схему базы данных в соответствии с моделью данных с помощью Entity Framework Core, необходимо использовать миграцию. Миграции могут создавать и постепенно обновлять схему базы данных, чтобы обеспечить синхронизацию с моделью данных приложения. Дополнительные сведения об этом шаблоне см. в обзоре миграций.

  1. Откройте окно терминала в корне проекта.

  2. Выполните следующую команду, чтобы создать начальную миграцию, которая может создать базу данных:

    Add-Migration InitialCreate
    
  3. Папка Migrations должна отображаться в каталоге проекта вместе с файлом, который вызывается InitialCreate с уникальными номерами, предварительно подготовленными. Выполните миграцию, чтобы создать базу данных с помощью следующей команды:

    Update-Database
    

    Средство Entity Framework Core создаст схему базы данных в Azure, определяемую классом PersonDbContext .

локальное тестирование приложения.

Приложение готово к локальному тестированию. Убедитесь, что вы вошли в Visual Studio или Azure CLI с той же учетной записью, что и администратор базы данных.

  1. Нажмите кнопку запуска в верхней части Visual Studio, чтобы запустить проект API.

  2. На странице пользовательского интерфейса Swagger разверните метод POST и выберите "Попробовать".

  3. Измените пример JSON, чтобы включить значения для имени и фамилии. Выберите "Выполнить" , чтобы добавить новую запись в базу данных. API возвращает успешный ответ.

    Снимок экрана: тестирование API.

  4. Разверните метод GET на странице пользовательского интерфейса Swagger и выберите "Попробовать". Выберите "Выполнить", а пользователь, который вы только что создали, возвращается.

Развертывание в Службу приложений Azure

Приложение готово к развертыванию в Azure. Visual Studio может создать службу приложение Azure и развернуть приложение в одном рабочем процессе.

  1. Убедитесь, что приложение остановлено и успешно выполняет сборку.

  2. В окне Обозреватель решений Visual Studio щелкните правой кнопкой мыши узел проекта верхнего уровня и выберите "Опубликовать".

  3. В диалоговом окне публикации выберите Azure в качестве цели развертывания, а затем нажмите кнопку Далее.

  4. Для конкретного целевого объекта выберите приложение Azure службу (Windows) и нажмите кнопку "Далее".

  5. Щелкните зеленый + значок, чтобы создать новую Служба приложений для развертывания и введите следующие значения:

    • Имя: оставьте значение по умолчанию.

    • Имя подписки: выберите подписку для развертывания.

    • Группа ресурсов: выберите "Создать " и создайте новую группу ресурсов с именем msdocs-dotnet-sql.

    • План размещения: выберите "Создать" , чтобы открыть диалоговое окно плана размещения. Оставьте значения по умолчанию и нажмите кнопку "ОК".

    • Нажмите кнопку "Создать", чтобы закрыть исходное диалоговое окно. Visual Studio создает ресурс Служба приложений в Azure.

      Снимок экрана: развертывание с помощью Visual Studio.

  6. После создания ресурса убедитесь, что он выбран в списке служб приложений, а затем нажмите кнопку "Далее".

  7. На шаге Управление API установите флажок "Пропустить этот шаг" в нижней части и нажмите кнопку "Готово".

  8. Выберите Опубликовать в правом верхнем углу сводки по профилю публикации, чтобы развернуть приложение в Azure.

По завершении развертывания Visual Studio запускает браузер для отображения размещенного приложения, но на этом этапе приложение работает неправильно в Azure. Для получения данных необходимо настроить безопасное подключение между Служба приложений и базой данных SQL.

Подключение Служба приложений к База данных SQL Azure

Для подключения экземпляра Служба приложений к База данных SQL Azure необходимо выполнить следующие действия.

  1. Создайте управляемое удостоверение для Служба приложений. Библиотека, включенная Microsoft.Data.SqlClient в приложение, автоматически обнаруживает управляемое удостоверение, как и локального пользователя Visual Studio.
  2. Создайте пользователя базы данных SQL и свяжите его с управляемым удостоверением Служба приложений.
  3. Назначьте роли SQL пользователю базы данных, разрешающим чтение, запись и потенциально другие разрешения.

Существует несколько средств, доступных для реализации следующих действий.

Соединитель служб — это средство, которое упрощает аутентификацию подключений между различными службами в Azure. Соединитель служб в настоящее время поддерживает подключение Служба приложений к базе данных SQL с помощью Azure CLI с помощью az webapp connection create sql команды. Эта одна команда выполняет три описанных выше шага.

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

Изменения, внесенные соединителем службы, можно проверить в параметрах Служба приложений.

  1. Перейдите на страницу удостоверений для Служба приложений. На вкладке "Назначаемая системой" состояние должно иметь значение "Вкл.". Это значение означает, что управляемое удостоверение, назначаемое системой, было включено для приложения.

  2. Перейдите на страницу конфигурации для Служба приложений. На вкладке "Строки подключения" должна появиться строка подключения с именем AZURE_SQL_CONNECTIONSTRING. Выберите элемент Click, чтобы отобразить текст значения, чтобы просмотреть созданные строка подключения без пароля. Имя этого строка подключения совпадает с именем, настроенным в приложении, поэтому оно будет обнаружено автоматически при запуске в Azure.

Внимание

Хотя это решение обеспечивает простой подход к началу работы, это не рекомендуется для рабочих сред предприятия. В этих сценариях приложение не должно выполнять все операции с использованием одного удостоверения с повышенными привилегиями. Необходимо попытаться реализовать принцип наименьшей привилегии, настроив несколько удостоверений с определенными разрешениями для конкретных задач.

Дополнительные сведения о настройке ролей базы данных и безопасности см. в следующих ресурсах:

Руководство. Защита базы данных в База данных SQL Azure

Авторизация доступа к Базе данных SQL, Управляемому экземпляру SQL и Azure Synapse Analytics

Тестирование развернутого приложения

Перейдите по URL-адресу приложения, чтобы проверить, работает ли подключение к База данных SQL Azure. URL-адрес приложения можно найти на странице обзора Служба приложений. /person Добавьте путь к концу URL-адреса, чтобы перейти к той же конечной точке, что и вы проверили локально.

Пользователь, созданный локально, должен отображаться в браузере. Поздравляем! Теперь приложение подключено к База данных SQL Azure как в локальных, так и в размещенных средах.

Очистка ресурсов

После завершения работы с База данных SQL Azure удалите ресурс, чтобы избежать непредвиденных затрат.

  1. В строке поиска портал Azure найдите SQL Azure и выберите соответствующий результат.

  2. Найдите и выберите базу данных в списке баз данных.

  3. На странице обзора База данных SQL Azure нажмите кнопку "Удалить".

  4. На открывшейся странице Azure необходимо удалить... введите имя базы данных, чтобы подтвердить, а затем нажмите кнопку "Удалить".