Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.
Warning
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.
В этом руководстве вы добавите классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели известны как классы POCO (от "Plain-Old CLR Objects"), поскольку они не зависят от EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В обозревателе решений щелкните правой кнопкой мыши проект RazorPagesMovie . Выберите Добавить>Новая папка. Назовите папку
Models.Щелкните правой кнопкой мыши папку
Models. Выберите Добавить>Класс. Присвойте классу имя Movie.Добавьте в класс
Movieследующие свойства:using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models; public class Movie { public int Id { get; set; } public string? Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string? Genre { get; set; } public decimal Price { get; set; } }
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.Атрибут [DataType], указывающий тип данных в свойстве
ReleaseDate. С помощью этого атрибута:- Пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата без каких-либо сведений о времени.
Вопросительный знак после
stringуказывает, что свойство равно null. Дополнительные сведения см. в статье Ссылочные типы, допускающие значение NULL.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе вы создаете основу для модели фильма. Инструмент шаблонирования создает страницы для операций чтения, создания, обновления и удаления (CRUD) для модели фильма.
Создайте папку Pages/Movies.
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
- В диалоговом окне Добавление нового шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Нажмите кнопку "Добавить".
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
В следующем руководстве описаны созданные файлы.
Процесс генерации шаблона добавляет следующий выделенный код в файл Program.cs:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages()
.WithStaticAssets();
app.Run();
В этом руководстве вы позже узнаете об изменениях Program.cs.
Создание начальной схемы базы данных с помощью функции миграции EF
Функция миграции в Entity Framework Core предоставляет следующие возможности:
- Создание начальной схемы базы данных.
- Поэтапное обновление схемы базы данных, чтобы она соответствовала модели данных приложения. Этот подход сохраняет существующие данные в базе данных.
В этом разделе используйте окно консоли диспетчера пакетов (PMC) для:
Добавить первоначальную миграцию.
Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующую команду:
Add-Migration InitialCreateКоманда
Add-Migrationформирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной вDbContext. АргументInitialCreateназывает миграцию. Вы можете использовать любое имя, но по соглашению выберите имя, описывающее миграцию.
Отображается следующее предупреждение, которое вы адресуете на следующем шаге:
Тип хранилища не указан для десятичного столбца "Цена" в типе сущности "Фильм". Это условие приводит к тому, что значения автоматически усечены, если они не соответствуют точности и масштабированию по умолчанию. Явным образом укажите тип столбца SQL Server, который может содержать все значения в OnModelCreating с помощью HasColumnType, укажите точность и масштабирование с помощью HasPrecision или настройте преобразователь значений с помощью HasConversion.
В PMC введите следующую команду:
Update-DatabaseКоманда
Update-Databaseвыполняет методUpв миграциях, которые ещё не были применены. В этом случае команда запускаетUpметод вMigrations/<time-stamp>_InitialCreate.csфайле, который создает базу данных.
Контекст данных RazorPagesMovieContext:
- Получается из Microsoft.EntityFrameworkCore.DbContext.
- Указывает сущности, которые включаются в модель данных.
- Координация функций EF Core, таких как создание, чтение, обновление и удаление, для модели
Movie.
Класс RazorPagesMovieContext в созданном файле Data/RazorPagesMovieContext.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается контексту путем вызова метода в объекте DbContextOptions . При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).Если вы получите следующую ошибку:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.Вы пропустили шаг миграции.
Протестируйте ссылку Create New (Создать).
Note
Возможно, вы не сможете вводить десятичные запятые Price в поле. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.
- Проверьте ссылки Изменить, Сведения и Удалить.
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Регистрируйте службы, такие как контекст базы данных, с внедрением зависимостей EF Core во время запуска приложения. Предоставьте компоненты, требующие этих служб (например Razor , Pages) с помощью параметров конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его в контейнере внедрения зависимостей. Приведённый ниже выделенный код добавляется в файл Program.cs генератором шаблонного кода:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages()
.WithStaticAssets();
app.Run();
Устранение неполадок с готовым примером
Если вы столкнулись с проблемой, которую не можете решить, сравните свой код с кодом готового проекта. Просмотрите или скачайте завершенный проект (порядок загрузки).
Дальнейшие шаги
В этом учебнике добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели известны как классы POCO (от "Plain-Old CLR Objects"), поскольку они не зависят от EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В обозревателе решений щелкните правой кнопкой мыши проект RazorPagesMovie>Добавить>Новая папка. Назовите папку
Models.Щелкните правой кнопкой мыши папку
Models. Выберите Добавить>Класс. Присвойте классу имя Movie.Добавьте в класс
Movieследующие свойства:using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models; public class Movie { public int Id { get; set; } public string? Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string? Genre { get; set; } public decimal Price { get; set; } }
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.Атрибут [DataType], указывающий тип данных в свойстве
ReleaseDate. С этим атрибутом:- Пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата, а не время.
Знак вопроса после
stringозначает, что свойство может принимать значение NULL. Дополнительные сведения см. в статье Ссылочные типы, допускающие значение NULL.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе создается каркас модели Movie. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Создайте папку Pages/Movies.
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
В диалоговом окне Добавление нового шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Нажмите кнопку "Добавить".
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
В следующем учебнике приводится описание созданных файлов.
Процесс генерации шаблона добавляет следующий выделенный код в файл Program.cs:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Изменения Program.cs описаны далее в этом руководстве.
Создание начальной схемы базы данных с помощью функции миграции EF
Функция миграции в Entity Framework Core предоставляет следующие возможности:
- Создание начальной схемы базы данных.
- Поэтапное обновление схемы базы данных, чтобы она соответствовала модели данных приложения. Существующие данные в базе данных сохраняются.
В этом разделе окно Консоль диспетчера пакетов (PMC) используется для выполнения следующих действий:
Добавить первоначальную миграцию.
Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующую команду:
Add-Migration InitialCreateКоманда
Add-Migrationформирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной вDbContext. АргументInitialCreateиспользуется для указания имени миграции. Можно использовать любое имя, однако по соглашению выбирается имя, которое описывает миграцию.
Появится следующее предупреждение, которое будет устранено на следующем шаге:
Для десятичного столбца 'Price' в типе сущности 'Movie' тип не указан. Это приведет к тому, что значения будут усекаться без вмешательства пользователя, если они не помещаются в значения точности и масштаба по умолчанию. С помощью метода HasColumnType() явно укажите тип столбца SQL Server, который может вместить все значения".
В PMC введите следующую команду:
Update-DatabaseКоманда
Update-Databaseвыполняет методUpв миграциях, которые не были применены. В этом случае команда запускаетUpметод вMigrations/<time-stamp>_InitialCreate.csфайле, который создает базу данных.
Контекст данных RazorPagesMovieContext:
- Получается из Microsoft.EntityFrameworkCore.DbContext.
- Указывает сущности, которые включаются в модель данных.
- Координирует EF Core функциональность, такую как создание, чтение, обновление и удаление, для модели
Movie.
Класс RazorPagesMovieContext в созданном файле Data/RazorPagesMovieContext.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается в контекст путем вызова метода для объекта DbContextOptions. При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).Если вы получите следующую ошибку:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.Вы пропустили шаг миграции.
Протестируйте ссылку Create New (Создать).
Note
В поле
Priceнельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Службы, такие как EF Core контекст базы данных, регистрируются при внедрении зависимостей во время запуска приложения. Компоненты, которым требуются эти службы (например, Razor Pages), получают их через параметры конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его с использованием контейнера внедрения зависимостей. Приведённый ниже выделенный код добавляется в файл Program.cs генератором шаблонного кода:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapRazorPages();
app.Run();
Устранение неполадок с готовым примером
Если вы столкнулись с проблемой, которую не можете решить, сравните свой код с кодом готового проекта. Просмотрите или скачайте завершенный проект (порядок загрузки).
Дальнейшие шаги
В этом учебнике добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели известны как классы POCO (от "Plain-Old CLR Objects"), поскольку они не зависят от EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В обозревателе решений щелкните правой кнопкой мыши проект RazorPagesMovie>Добавить>Новая папка. Назовите папку
Models.Щелкните правой кнопкой мыши папку
Models. Выберите Добавить>Класс. Присвойте классу имя Movie.Добавьте в класс
Movieследующие свойства:using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models; public class Movie { public int Id { get; set; } public string? Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string? Genre { get; set; } public decimal Price { get; set; } }
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.Атрибут [DataType], указывающий тип данных в свойстве
ReleaseDate. С этим атрибутом:- Пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата, а не время.
Знак вопроса после
stringуказывает, что свойство может иметь значение null. Дополнительные сведения см. в статье Ссылочные типы, допускающие значение NULL.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе генерируется каркас модели фильма. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Создайте папку Pages/Movies.
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
В диалоговом окне Добавление нового шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Нажмите кнопку "Добавить".
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
В следующем учебнике приводится описание созданных файлов.
Процесс генерации шаблона добавляет следующий выделенный код в файл Program.cs:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Изменения Program.cs описаны далее в этом руководстве.
Создание начальной схемы базы данных с помощью функции миграции EF
Функция миграции в Entity Framework Core предоставляет следующие возможности:
- Создание начальной схемы базы данных.
- Поэтапное обновление схемы базы данных, чтобы она соответствовала модели данных приложения. Существующие данные в базе данных сохраняются.
В этом разделе окно Консоль диспетчера пакетов (PMC) используется для выполнения следующих действий:
Добавить первоначальную миграцию.
Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующую команду:
Add-Migration InitialCreateКоманда
Add-Migrationформирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной вDbContext. АргументInitialCreateиспользуется для указания имени миграции. Можно использовать любое имя, однако по соглашению выбирается имя, которое описывает миграцию.
Появится следующее предупреждение, которое будет устранено на следующем шаге:
Для десятичного столбца 'Price' в типе сущности 'Movie' тип не указан. Это приведет к тому, что значения будут усекаться без вмешательства пользователя, если они не помещаются в значения точности и масштаба по умолчанию. С помощью метода HasColumnType() явно укажите тип столбца SQL Server, который может вместить все значения".
В PMC введите следующую команду:
Update-DatabaseКоманда
Update-Databaseвыполняет методUpв миграциях, которые не были применены. В этом случае команда запускаетUpметод вMigrations/<time-stamp>_InitialCreate.csфайле, который создает базу данных.
Контекст данных RazorPagesMovieContext:
- Получается из Microsoft.EntityFrameworkCore.DbContext.
- Указывает сущности, которые включаются в модель данных.
- Координирует EF Core функциональность, такую как создание, чтение, обновление и удаление, для модели
Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается в контекст путем вызова метода для объекта DbContextOptions. При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).Если вы получите следующую ошибку:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.Вы пропустили шаг миграции.
Протестируйте ссылку Create New (Создать).
Note
В поле
Priceнельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Службы, такие как EF Core контекст базы данных, регистрируются при внедрении зависимостей во время запуска приложения. Компоненты, которым требуются эти службы (например, Razor Pages), получают их через параметры конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его с использованием контейнера внедрения зависимостей. Приведённый ниже выделенный код добавляется в файл Program.cs генератором шаблонного кода:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Устранение неполадок с готовым примером
Если вы столкнулись с проблемой, которую не можете решить, сравните свой код с кодом готового проекта. Просмотрите или скачайте завершенный проект (порядок загрузки).
Дальнейшие шаги
В этом учебнике добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели известны как классы POCO (от "Plain-Old CLR Objects"), поскольку они не зависят от EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В обозревателе решений щелкните правой кнопкой мыши проект RazorPagesMovie>Добавить>Новая папка. Назовите папку
Models.Щелкните правой кнопкой мыши папку
Models. Выберите Добавить>Класс. Присвойте классу имя Movie.Добавьте в класс
Movieследующие свойства:using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models; public class Movie { public int Id { get; set; } public string? Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string? Genre { get; set; } public decimal Price { get; set; } }
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.Атрибут [DataType], указывающий тип данных в свойстве
ReleaseDate. С этим атрибутом:- Пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата, а не время.
Знак вопроса после
stringуказывает, что свойство может принимать значение NULL. Дополнительные сведения см. в статье Ссылочные типы, допускающие значение NULL.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе генерируется каркас модели фильма. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Создайте папку Pages/Movies.
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
В диалоговом окне Добавление нового шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Нажмите кнопку "Добавить".
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
В следующем учебнике приводится описание созданных файлов.
Процесс генерации шаблона добавляет следующий выделенный код в файл Program.cs:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Изменения Program.cs описаны далее в этом руководстве.
Создание начальной схемы базы данных с помощью функции миграции EF
Функция миграции в Entity Framework Core предоставляет следующие возможности:
- Создание начальной схемы базы данных.
- Поэтапное обновление схемы базы данных, чтобы она соответствовала модели данных приложения. Существующие данные в базе данных сохраняются.
В этом разделе окно Консоль диспетчера пакетов (PMC) используется для выполнения следующих действий:
- Добавить первоначальную миграцию.
- Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующие команды:
Add-Migration InitialCreate Update-Database
Команда
Add-Migrationформирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной вDbContext. АргументInitialCreateиспользуется для указания имени миграции. Можно использовать любое имя, однако по соглашению выбирается имя, которое описывает миграцию.Команда
Update-Databaseвыполняет методUpв миграциях, которые не были применены. В этом случае команда запускаетUpметод вMigrations/<time-stamp>_InitialCreate.csфайле, который создает базу данных.
Появится следующее предупреждение, которое будет устранено на следующем шаге:
Для десятичного столбца 'Price' в типе сущности 'Movie' тип не указан. Это приведет к тому, что значения будут усекаться без вмешательства пользователя, если они не помещаются в значения точности и масштаба по умолчанию. С помощью метода HasColumnType() явно укажите тип столбца SQL Server, который может вместить все значения".
Контекст данных RazorPagesMovieContext:
- Получается из Microsoft.EntityFrameworkCore.DbContext.
- Указывает сущности, которые включаются в модель данных.
- Координирует EF Core функциональность, такую как создание, чтение, обновление и удаление, для модели
Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; } = default!;
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается в контекст путем вызова метода для объекта DbContextOptions. При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).Если вы получите следующую ошибку:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.Вы пропустили шаг миграции.
Протестируйте ссылку Create New (Создать).
Note
В поле
Priceнельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Службы, такие как EF Core контекст базы данных, регистрируются при внедрении зависимостей во время запуска приложения. Компоненты, которым требуются эти службы (например, Razor Pages), получают их через параметры конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его с использованием контейнера внедрения зависимостей. Приведённый ниже выделенный код добавляется в файл Program.cs генератором шаблонного кода:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Устранение неполадок с готовым примером
Если вы столкнулись с проблемой, которую не можете решить, сравните свой код с кодом готового проекта. Просмотрите или скачайте завершенный проект (порядок загрузки).
Дальнейшие шаги
В этом учебнике добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели известны как классы POCO (от "Plain-Old CLR Objects"), поскольку они не зависят от EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В обозревателе решений щелкните правой кнопкой мыши проект RazorPagesMovie>Добавить>Новая папка. Назовите папку
Models.Щелкните правой кнопкой мыши папку
Models. Выберите Добавить>Класс. Присвойте классу имя Movie.Добавьте в класс
Movieследующие свойства:using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } = string.Empty; [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } = string.Empty; public decimal Price { get; set; } } }
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.Атрибут [DataType], указывающий тип данных в свойстве
ReleaseDate. С этим атрибутом:- Пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата, а не время.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе создается каркас модели Movie. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Добавьте пакет NuGet
Microsoft.EntityFrameworkCore.Design, который необходим для средства формирования шаблонов.-
В меню "Сервис" выберите NuGet диспетчер пакетов> Manage NuGet Packages for Solution

- Выберите вкладку Browse.
- Введите
Microsoft.EntityFrameworkCore.Designи выберите его из списка. - Установите флажок Проект и выберите Установить.
- Нажмите кнопку Принимаю в диалоговом окне Принятие условий лицензионного соглашения.
-
В меню "Сервис" выберите NuGet диспетчер пакетов> Manage NuGet Packages for Solution
Создайте папку Pages/Movies.
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
В диалоговом окне Добавление нового шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Нажмите кнопку "Добавить".
Если появится сообщение об ошибке о том, что необходимо установить пакет
Microsoft.EntityFrameworkCore.SqlServer, повторите действия, начиная с пункта Add>New Scaffolded Item.
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
В следующем учебнике приводится описание созданных файлов.
Процесс генерации шаблона добавляет следующий выделенный код в файл Program.cs:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Изменения Program.cs описаны далее в этом руководстве.
Создание начальной схемы базы данных с помощью функции миграции EF
Функция миграции в Entity Framework Core предоставляет следующие возможности:
- Создание начальной схемы базы данных.
- Поэтапное обновление схемы базы данных, чтобы она соответствовала модели данных приложения. Существующие данные в базе данных сохраняются.
В этом разделе окно Консоль диспетчера пакетов (PMC) используется для выполнения следующих действий:
- Добавить первоначальную миграцию.
- Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующие команды:
Add-Migration InitialCreate Update-Database
Предыдущие команды устанавливают средства Entity Framework Core и выполняют команду migrations для создания кода, который создает исходную схему базы данных.
Появится следующее предупреждение, которое будет устранено на следующем шаге:
Для десятичного столбца 'Price' в типе сущности 'Movie' тип не указан. Это приведет к тому, что значения будут усекаться без вмешательства пользователя, если они не помещаются в значения точности и масштаба по умолчанию. С помощью метода HasColumnType() явно укажите тип столбца SQL Server, который может вместить все значения".
Команда migrations формирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной в DbContext. Аргумент InitialCreate используется для присвоения имен миграциям. Можно использовать любое имя, однако по соглашению выбирается имя, которое описывает миграцию.
Команда update выполняет метод Up в миграциях, которые не были применены. В этом случае update выполняет метод Up в файле Migrations/<time-stamp>_InitialCreate.cs, который создает базу данных.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Службы, такие как EF Core контекст базы данных, регистрируются при внедрении зависимостей во время запуска приложения. Компоненты, которым требуются эти службы (например, Razor Pages), получают их через параметры конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его с использованием контейнера внедрения зависимостей. Приведённый ниже выделенный код добавляется в файл Program.cs генератором шаблонного кода:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RazorPagesMovieContext") ?? throw new InvalidOperationException("Connection string 'RazorPagesMovieContext' not found.")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Контекст данных RazorPagesMovieContext:
- Получается из Microsoft.EntityFrameworkCore.DbContext.
- Указывает сущности, которые включаются в модель данных.
- Координирует EF Core функциональность, такую как создание, чтение, обновление и удаление, для модели
Movie.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Models;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie>? Movie { get; set; }
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается в контекст путем вызова метода для объекта DbContextOptions. При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).Если вы получите следующую ошибку:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.Вы пропустили шаг миграции.
Протестируйте ссылку Create New (Создать).
Note
В поле
Priceнельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Устранение неполадок с готовым примером
Если вы столкнулись с проблемой, которую не можете решить, сравните свой код с кодом готового проекта. Просмотрите или скачайте завершенный проект (порядок загрузки).
Дальнейшие шаги
В этом разделе добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели известны как классы POCO (от "Plain-Old CLR Objects"), поскольку они не зависят от EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Просмотреть или скачать пример кода (описание скачивания).
Добавление модели данных
В обозревателе решений щелкните правой кнопкой мыши проект RazorPagesMovie>Добавить>Новая папка. Назовите папку
Models.Щелкните правой кнопкой мыши папку
Models. Выберите Добавить>Класс. Присвойте классу имя Movie.Добавьте в класс
Movieследующие свойства:using System; using System.ComponentModel.DataAnnotations; namespace RazorPagesMovie.Models { public class Movie { public int ID { get; set; } public string Title { get; set; } [DataType(DataType.Date)] public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } } }
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.[DataType(DataType.Date)]: Атрибут [DataType] указывает тип данных (Date). С этим атрибутом:- Пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата, а не время.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе генерируется каркас модели фильма. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Создайте папку Pages/Movies:
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
В диалоговом окне Добавление шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Нажмите кнопку "Добавить".
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
Обновленные файлы
Startup.cs
В следующем разделе приводится описание созданных и обновленных файлов.
Создание начальной схемы базы данных с помощью функции миграции EF
Функция миграции в Entity Framework Core предоставляет следующие возможности:
- Создание начальной схемы базы данных.
- Поэтапное обновление схемы базы данных, чтобы она соответствовала модели данных приложения. Существующие данные в базе данных сохраняются.
В этом разделе окно Консоль диспетчера пакетов (PMC) используется для выполнения следующих действий:
- Добавить первоначальную миграцию.
- Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующие команды:
Add-Migration InitialCreate Update-Database
Для SQL Server предыдущие команды приводят к появлению следующего предупреждения: "Для десятичного столбца 'Price' в типе сущности 'Movie' не был указан тип. Это приведет к тому, что значения будут усекаться без вмешательства пользователя, если они не помещаются в значения точности и масштаба по умолчанию. С помощью метода 'HasColumnType()' явно укажите тип столбца SQL Server, который может вместить все значения".
Пропустите это предупреждение, так как оно будет рассмотрено на более позднем этапе.
Команда migrations формирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной в DbContext. Аргумент InitialCreate используется для присвоения имен миграциям. Можно использовать любое имя, однако по соглашению выбирается имя, которое описывает миграцию.
Команда update выполняет метод Up в миграциях, которые не были применены. В этом случае update выполняет метод Up в файле Migrations/<time-stamp>_InitialCreate.cs, который создает базу данных.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Службы, такие как EF Core контекст базы данных, регистрируются при внедрении зависимостей во время запуска приложения. Компоненты, которым требуются эти службы (например, Razor Pages), получают их через параметры конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его с использованием контейнера внедрения зависимостей.
Проверьте метод Startup.ConfigureServices. Выделенная строка была добавлена генератором шаблона:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Функциональность RazorPagesMovieContext, такая как создание, чтение, обновление и удаление, координируется EF Core для модели Movie. Контекст данных (RazorPagesMovieContext) получен из Microsoft.EntityFrameworkCore.DbContext. Контекст данных указывает сущности, которые включаются в модель данных.
using Microsoft.EntityFrameworkCore;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (
DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается в контекст путем вызова метода для объекта DbContextOptions. При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).Если вы получите следующую ошибку:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed. Login failed for user 'User-name'.Вы пропустили шаг миграции.
Протестируйте ссылку Создать.
Note
В поле
Priceнельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
Журналирование SQL в Entity Framework Core
Конфигурация ведения журналов обычно предоставляется разделом Logging в файлах appsettings.{Environment}.json. Чтобы регистрировать инструкции SQL, добавьте "Microsoft.EntityFrameworkCore.Database.Command": "Information" в файл appsettings.Development.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDB-2;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
,"Microsoft.EntityFrameworkCore.Database.Command": "Information"
}
},
"AllowedHosts": "*"
}
В приведенном выше коде JSON инструкции SQL отображаются в командной строке и в окне вывода Visual Studio.
Дополнительные сведения см. в следующих ресурсах:
- Логирование в .NET и ASP.NET Core
-
ASP.NET шаблон отключает EF Core ведение журнала SQL по умолчанию (
dotnet/aspnetcore#32977)
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Дальнейшие шаги
В этом разделе добавляются классы для управления фильмами. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным.
Классы модели называются классами POCO (из "обычных объектов CLR"), так как они не имеют никакой зависимости EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Просмотреть или скачать пример кода (описание скачивания).
Warning
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Добавление модели данных
Щелкните правой кнопкой мыши проект RazorPagesMovie>Добавить>Новая папка. Назовите папку Models.
Щелкните правой кнопкой мыши папку Models. Выберите Добавить>Класс. Присвойте классу имя Movie.
Добавьте в класс Movie следующие свойства:
using System;
using System.ComponentModel.DataAnnotations;
namespace RazorPagesMovie.Models
{
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
}
Класс Movie содержит:
Поле
IDявляется обязательным для первичного ключа базы данных.[DataType(DataType.Date)]: Атрибут DataType указывает тип данных (Date). С этим атрибутом:- пользователю не требуется вводить сведения о времени в поле даты.
- Отображается только дата, а не время.
DataAnnotations рассматриваются в следующем руководстве.
DataAnnotations рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе генерируется каркас модели фильма. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Создайте папку Pages/Movies:
- Щелкните правой кнопкой мыши по папке Pages и выберите >Добавить>Новая папка.
- Назовите папку Movies.
Щелкните правой кнопкой мыши по папке Pages/Movies>Добавить>Новый шаблонный элемент.
В диалоговом окне Добавление шаблона выберите RazorСтраницы с использованием Entity Framework (CRUD)>Добавить.
Заполните диалоговое окно Добавление Razor страниц с использованием Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке класса контекста данных выберите знак + (плюс) и измените сгенерированное имя с RazorPagesMovie.
Models.RazorPagesMovieContext на RazorPagesMovie.Data.RazorPagesMovieContext. Это изменение не требуется. Создает класс контекста базы данных с правильным пространством имён. - Нажмите кнопку "Добавить".
Файл appsettings.json обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Файлы, созданные
Процесс scaffold создаёт и обновляет следующие файлы:
- Pages/Movies: Создание, удаление, сведения, редактирование и индекс.
Data/RazorPagesMovieContext.cs
Updated
Startup.cs
В следующем разделе приводится описание созданных и обновленных файлов.
Начальная миграция
В этом разделе консоль диспетчера пакетов (PMC) используется для выполнения следующих действий:
- Добавить первоначальную миграцию.
- Обновите базу данных с помощью начальной миграции.
В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В PMC введите следующие команды:
Add-Migration InitialCreate
Update-Database
Приведенные выше команды создают следующее предупреждение: "Тип не указан для десятичного столбца "Цена" в типе сущности Movie. Это приведет к тому, что значения будут усекаться без вмешательства пользователя, если они не помещаются в значения точности и масштаба по умолчанию. С помощью метода 'HasColumnType()' явно укажите тип столбца SQL Server, который может вместить все значения".
Пропустите это предупреждение, так как оно будет рассмотрено на более позднем этапе.
Команда миграции формирует код для создания схемы исходной базы данных. Схема создается на основе модели, указанной в DbContext. Аргумент InitialCreate используется для присвоения имен миграциям. Можно использовать любое имя, однако по соглашению выбирается имя, которое описывает миграцию.
Команда update выполняет метод Up в миграциях, которые не были применены. В этом случае update выполняет метод Up в файле Migrations/<time-stamp>_InitialCreate.cs, который создает базу данных.
Проверка контекста, зарегистрированного с помощью внедрения зависимостей
ASP.NET Core поддерживает внедрение зависимостей. Службы, такие как EF Core контекст базы данных, регистрируются при внедрении зависимостей во время запуска приложения. Компоненты, которым требуются эти службы, например Razor Pages, получают их через параметры конструктора. Код конструктора, который получает экземпляр контекста базы данных, приведен далее в этом руководстве.
Средство формирования шаблонов автоматически создает контекст базы данных и регистрирует его с использованием контейнера внедрения зависимостей.
Проверьте метод Startup.ConfigureServices. Выделенная строка была добавлена генератором шаблона:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
}
Функциональность RazorPagesMovieContext, такая как создание, чтение, обновление и удаление, координируется EF Core для модели Movie. Контекст данных (RazorPagesMovieContext) получен из Microsoft.EntityFrameworkCore.DbContext. Контекст данных указывает сущности, которые включаются в модель данных.
using Microsoft.EntityFrameworkCore;
namespace RazorPagesMovie.Data
{
public class RazorPagesMovieContext : DbContext
{
public RazorPagesMovieContext (
DbContextOptions<RazorPagesMovieContext> options)
: base(options)
{
}
public DbSet<RazorPagesMovie.Models.Movie> Movie { get; set; }
}
}
Представленный выше код создает свойство DbSet<Movie> для набора сущностей. В терминологии Entity Framework набор сущностей обычно соответствует таблице базы данных. Сущность соответствует строке в таблице.
Имя строки подключения передается в контекст путем вызова метода для объекта DbContextOptions. При локальной разработке система конфигурации считывает строку подключения из файла appsettings.json.
Тестирование приложения
- Запустите приложение и добавьте
/Moviesк URL-адресу в браузере (http://localhost:port/movies).
Если возникает ошибка:
SqlException: Cannot open database "RazorPagesMovieContext-GUID" requested by the login. The login failed.
Login failed for user 'User-name'.
Вы пропустили шаг миграции.
Протестируйте ссылку Создать.
Note
В поле
Priceнельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для неанглоязычных региональных стандартов, в которых в качестве десятичного разделителя используется запятая (","), а также для форматов даты, отличных от принятых в американском английском, приложение необходимо глобализовать. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем руководстве объясняется, какие файлы создаются при генерации каркаса.
Дальнейшие шаги
ASP.NET Core