Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Подсказка
Это фрагмент из электронной книги для разработчиков ASP NET веб-формы для Azure, Blazor доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.
Доступ к данным является основой приложения веб-форм ASP.NET. Если вы создаете формы для Интернета, что происходит с данными? С помощью веб-форм существовало несколько методов доступа к данным, которые можно использовать для взаимодействия с базой данных:
- Источники данных
- ADO.NET
- Entity Framework (Энтити Фреймворк)
Источники данных были элементами управления, которые можно разместить на странице веб-форм и настроить, как и другие элементы управления. Visual Studio предоставил удобный набор диалогов для настройки и привязки элементов управления к страницам веб-форм. Разработчики, которые пользуются подходом "низкий код" или "без кода", предпочли этот метод при первом выпуске веб-форм.
ADO.NET — это низкоуровневый подход к взаимодействию с базой данных. Ваши приложения могут устанавливать соединение с базой данных с помощью команд, дататаблиц и наборов данных для взаимодействия. Затем результаты могут быть привязаны к полям на экране без большого количества кода. Недостаток этого подхода заключается в том, что каждый набор объектов ADO.NET (Connection, Commandи DataTable) привязан к библиотекам, предоставляемым поставщиком базы данных. Использование этих компонентов сделало код жестким и сложным для переноса в другую базу данных.
Entity Framework (Энтити Фреймворк)
Entity Framework (EF) — это платформа сопоставления объектов с открытым исходным кодом, поддерживаемая .NET Foundation. Изначально выпущено с помощью .NET Framework, EF позволяет создавать код для подключений к базе данных, схем хранения и взаимодействий. С помощью этой абстракции вы можете сосредоточиться на бизнес-правилах приложения и позволить базе данных управляться доверенным администратором базы данных. В .NET можно использовать обновленную версию EF с именем EF Core. EF Core помогает создавать и поддерживать взаимодействие между кодом и базой данных с рядом команд, доступных для вас с помощью dotnet ef средства командной строки. Давайте рассмотрим несколько примеров, чтобы вы работали с базой данных.
Первый код EF
Быстрый способ приступить к созданию взаимодействия с базой данных — начать работу с объектами класса, с которыми вы хотите работать. EF предоставляет средство для создания соответствующего кода базы данных для классов. Этот подход называется разработкой по принципу «Code First». Рассмотрим следующий Product класс для примера приложения магазина, которое мы хотим сохранить в реляционной базе данных, например Microsoft SQL Server.
public class Product
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[MaxLength(4000)]
public string Description { get; set; }
[Range(0, 99999,99)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
}
Продукт имеет первичный ключ и три дополнительных поля, которые будут созданы в нашей базе данных:
- EF определяет
Idсвойство как первичный ключ по соглашению. -
Nameбудет храниться в столбце, настроенном для хранения текста. Атрибут[Required], декорирующий это свойство, добавит ограничениеnot null, чтобы помочь применить объявленное поведение этого свойства. -
Descriptionбудет храниться в столбце, настроенном для текстового хранилища, и имеет максимальную длину 4000 символов, определяемых атрибутом[MaxLength]. Схема базы данных будет настроена с помощью столбца с именемMaxLengthс помощью типаvarchar(4000)данных. - Свойство
Priceбудет храниться в виде валюты. Атрибут[Range]создаст соответствующие ограничения, чтобы предотвратить хранение данных за пределами минимального и максимального объявленного значения.
Необходимо добавить этот Product класс в класс контекста базы данных, который определяет операции подключения и перевода с нашей базой данных.
public class MyDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
Класс MyDbContext предоставляет одно свойство, определяющее доступ и перевод для Product класса. Ваше приложение настраивает этот класс для взаимодействия с базой данных при помощи следующих записей, размещённых в методе Startup класса ConfigureServices (или в соответствующей части файла Program.cs с использованием свойства builder.Services вместо services):
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer("MY DATABASE CONNECTION STRING"));
Приведенный выше код будет подключаться к базе данных SQL Server с указанной строкой подключения. Строку подключения можно поместить в файл appsettings.json, переменные среды или другие места хранения конфигурации, и затем заменить эту строку правильным образом.
Затем можно создать таблицу базы данных, соответствующую этому классу, с помощью следующих команд:
dotnet ef migrations add 'Create Product table'
dotnet ef database update
Первая команда определяет изменения, которые вы вносите в схему базы данных, как новую миграцию EF под названием Create Product table. Миграция определяет, как применять и удалять новые изменения базы данных.
После применения у вас есть простая Product таблица в базе данных и некоторые новые классы, добавленные в проект, который помогает управлять схемой базы данных. По умолчанию эти созданные классы можно найти в новой папке с именем Migrations. При изменении класса Product или добавлении дополнительных связанных классов для взаимодействия с базой данных, необходимо снова выполнить команды командной строки с новым именем миграции. Эта команда создаст другой набор классов миграции для обновления схемы базы данных.
Первая база данных EF
Для существующих баз данных можно создать классы для EF Core с помощью средств командной строки .NET. Чтобы структурировать классы, используйте вариант следующей команды:
dotnet ef dbcontext scaffold "CONNECTION STRING" Microsoft.EntityFrameworkCore.SqlServer -c MyDbContext -t Product -t Customer
Предшествующая команда подключается к базе данных при помощи указанной строки подключения и поставщика Microsoft.EntityFrameworkCore.SqlServer. После подключения создается MyDbContext класс контекста базы данных. Кроме того, вспомогательные классы создаются для таблиц Product и Customer, которые были указаны с параметрами -t. Для этой команды существует множество параметров конфигурации для создания иерархии классов, подходящей для базы данных. Полный справочник см. в документации команды.
Дополнительные сведения о EF Core можно найти на сайте Документации Майкрософт.
Взаимодействие с веб-службами
Когда ASP.NET был впервые выпущен, службы SOAP были предпочтительным способом обмена данными между веб-серверами и клиентами. С тех пор изменилось многое, и предпочтительные взаимодействия со службами перешли на прямое взаимодействие с клиентом HTTP. С помощью ASP.NET Core и Blazorможно зарегистрировать конфигурацию HttpClient в Program.cs или в методе Startup класса ConfigureServices . Используйте эту конфигурацию, если необходимо взаимодействовать с конечной точкой HTTP. Рассмотрим следующий код конфигурации:
// in Program.cs
builder.Services.AddHttpClient("github", client =>
{
client.BaseAddress = new Uri("http://api.github.com/");
// GitHub API versioning
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
// GitHub requires a user-agent
client.DefaultRequestHeaders.Add("User-Agent", "BlazorWebForms-Sample");
});
Каждый раз, когда необходимо получить доступ к данным из GitHub, создайте клиент с именем github. Клиент настраивается с базовым адресом, а заголовки запросов задаются соответствующим образом. Вставьте IHttpClientFactory в Blazor компоненты с директивой @inject или атрибутом [Inject] в свойстве. Создайте именованный клиент и взаимодействуйте со службами с помощью следующего синтаксиса:
@inject IHttpClientFactory factory
...
@code {
protected override async Task OnInitializedAsync()
{
var client = factory.CreateClient("github");
var response = await client.GetAsync("repos/dotnet/docs/issues");
response.EnsureStatusCode();
var content = await response.Content.ReadAsStringAsync();
}
}
Этот метод возвращает строку, описывающую коллекцию проблем в репозитории dotnet/docs GitHub. Он возвращает содержимое в формате JSON, которое затем десериализуется в соответствующие объекты задач GitHub. Существует множество способов настроить HttpClientFactory для предоставления предварительно настроенных объектов HttpClient. Попробуйте настроить несколько HttpClient экземпляров с разными именами и конечными точками для различных веб-служб, с которыми вы работаете. Такой подход упрощает взаимодействие с этими службами на каждой странице. Дополнительные сведения см. в статье "Создание HTTP-запросов с помощью IHttpClientFactory".