Часть 2. Добавление модели в приложение Razor Pages в ASP.NET Core
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
В этом учебнике добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели называются классами POCO (от P lain-O ld CLR O bjects), так как они не имеют зависимостиEF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В Обозреватель решений щелкните правой кнопкой мыши проект> RazorPagesMovie Add>New Folder. Назовите папку
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 и выберите Добавить>New Folder (Новая папка).
- Назовите папку Movies.
Щелкните правой кнопкой мыши папку Pages/Movies и выберите Добавить>New Scaffolded Item (Создать шаблонный элемент).
В диалоговом окне Добавление шаблона щелкните Razor Pages на основе Entity Framework (CRUD)>Добавить.
Заполните поля в диалоговом окне Добавление Razor Pages на основе Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext
. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Выберите Добавить.
Файл appsettings.json
обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Предупреждение
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Create, Delete, Details, Edit и Index.
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 (Создать).
Примечание.
В поле
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 (от P lain-O ld CLR O bjects), так как они не имеют зависимостиEF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В Обозреватель решений щелкните правой кнопкой мыши проект> RazorPagesMovie Add>New Folder. Назовите папку
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 и выберите Добавить>New Folder (Новая папка).
- Назовите папку Movies.
Щелкните правой кнопкой мыши папку Pages/Movies и выберите Добавить>New Scaffolded Item (Создать шаблонный элемент).
В диалоговом окне Добавление шаблона щелкните Razor Pages на основе Entity Framework (CRUD)>Добавить.
Заполните поля в диалоговом окне Добавление Razor Pages на основе Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext
. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Выберите Добавить.
Файл appsettings.json
обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Предупреждение
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Create, Delete, Details, Edit и Index.
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 (Создать).
Примечание.
В поле
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 (от P lain-O ld CLR O bjects), так как они не имеют зависимостиEF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В Обозреватель решений щелкните правой кнопкой мыши проект> RazorPagesMovie Add>New Folder. Назовите папку
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 и выберите Добавить>New Folder (Новая папка).
- Назовите папку Movies.
Щелкните правой кнопкой мыши папку Pages/Movies и выберите Добавить>New Scaffolded Item (Создать шаблонный элемент).
В диалоговом окне Добавление шаблона щелкните Razor Pages на основе Entity Framework (CRUD)>Добавить.
Заполните поля в диалоговом окне Добавление Razor Pages на основе Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext
. - В раскрывающемся списке поставщика базы данных выберите SQL Server.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Выберите Добавить.
Файл appsettings.json
обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Предупреждение
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Create, Delete, Details, Edit и Index.
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 (Создать).
Примечание.
В поле
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 (от P lain-O ld CLR O bjects), так как они не имеют зависимостиEF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Добавление модели данных
В Обозреватель решений щелкните правой кнопкой мыши проект> RazorPagesMovie Add>New Folder. Назовите папку
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 рассматриваются в следующем руководстве.
Выполните сборку проекта, чтобы убедиться в отсутствии ошибок компиляции.
Создание модели фильма
В этом разделе создается модель фильма. То есть средство формирования шаблонов создает страницы для операций создания, чтения, обновления и удаления для модели фильма.
Добавьте пакет NuGet
Microsoft.EntityFrameworkCore.Design
, который необходим для средства формирования шаблонов.- В меню "Сервис" выберите NuGet диспетчер пакетов> Manage NuGet Packages for Solution
- Откройте вкладку Browse (Обзор).
- Введите
Microsoft.EntityFrameworkCore.Design
и выберите его из списка. - Установите флажок Проект и выберите Установить.
- Нажмите кнопку Принимаю в диалоговом окне Принятие условий лицензионного соглашения.
Создайте папку Pages/Movies.
- Щелкните правой кнопкой мыши папку Pages и выберите Добавить>New Folder (Новая папка).
- Назовите папку Movies.
Щелкните правой кнопкой мыши папку Pages/Movies и выберите Добавить>New Scaffolded Item (Создать шаблонный элемент).
В диалоговом окне Добавление шаблона щелкните Razor Pages на основе Entity Framework (CRUD)>Добавить.
Заполните поля в диалоговом окне Добавление Razor Pages на основе Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext
.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Выберите Добавить.
Если появляется сообщение об ошибке, в котором говорится о необходимости установить пакет
Microsoft.EntityFrameworkCore.SqlServer
, повторите действия, начиная с шага Добавить>New Scaffolded Item (Создать шаблонный элемент).
Файл appsettings.json
обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Предупреждение
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Create, Delete, Details, Edit и Index.
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 (Создать).
Примечание.
В поле
Price
нельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для других языков, кроме английского, используйте вместо десятичной точки запятую (,), а для отображения данных в форматах для других языков, кроме английского, выполните глобализацию приложения. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем учебнике рассматриваются файлы, созданные с помощью формирования шаблонов.
Устранение неполадок с завершенным примером
Если вы столкнулись с проблемой, которую не можете решить, сравните свой код с кодом готового проекта. Просмотрите или скачайте завершенный проект (порядок загрузки).
Следующие шаги
В этом разделе добавляются классы для управления фильмами в базе данных. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным. Сначала вы записываете классы модели и EF Core создаете базу данных.
Классы модели называются классами POCO (от P lain-O ld CLR O bjects), так как они не имеют зависимостиEF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Просмотреть или скачать пример кода (описание скачивания).
Добавление модели данных
В Обозреватель решений щелкните правой кнопкой мыши проект> RazorPagesMovie Add>New Folder. Назовите папку
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 и выберите Добавить>New Folder (Новая папка).
- Назовите папку Movies.
Щелкните правой кнопкой мыши папку Pages/Movies и выберите Добавить>New Scaffolded Item (Создать шаблонный элемент).
В диалоговом окне Добавление шаблона щелкните Razor Pages на основе Entity Framework (CRUD)>Добавить.
Заполните поля в диалоговом окне Добавление Razor Pages на основе Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке Класс контекста данных щелкните знак плюса (+).
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
RazorPagesMovie.Data.RazorPagesMovieContext
.
- В диалоговом окне Добавление контекста данных будет сгенерировано имя класса
- Выберите Добавить.
Файл appsettings.json
обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Предупреждение
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Созданные и обновленные файлы
В процессе формирования шаблонов создаются указанные ниже файлы.
- Pages/Movies: Create, Delete, Details, Edit и Index.
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'.
Вы пропустили шаг миграции.
Протестируйте ссылку Создать.
Примечание.
В поле
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.
Дополнительные сведения см. в статье Ведение журнала в ASP.NET Core и описании этой проблемы GitHub.
В следующем учебнике рассматриваются файлы, созданные с помощью формирования шаблонов.
Следующие шаги
В этом разделе добавляются классы для управления фильмами. Классы моделей приложения используют Entity Framework Core (EF Core) для работы с базой данных. EF Core — это реляционная схема объектов (O/RM), которая упрощает доступ к данным.
Классы модели называются классами POCO (из "обычных объектов CLR"), так как они не имеют никакой зависимости EF Core. Эти классы определяют свойства данных, которые хранятся в базе данных.
Просмотреть или скачать пример кода (описание скачивания).
Предупреждение
В этой статье используется локальная база данных, которая не требует проверки подлинности пользователя. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для развернутых тестовых и рабочих приложений см. в разделе "Безопасные потоки проверки подлинности".
Добавление модели данных
Щелкните правой кнопкой мыши проект> RazorPagesMovie Add>New Folder. Назовите папку 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 и выберите Добавить>New Folder (Новая папка).
- Назовите папку Movies.
Щелкните правой кнопкой мыши папку Pages/Movies и выберите Добавить>New Scaffolded Item (Создать шаблонный элемент).
В диалоговом окне Добавление шаблона щелкните Razor Pages на основе Entity Framework (CRUD)>Добавить.
Заполните поля в диалоговом окне Добавление Razor Pages на основе Entity Framework (CRUD):
- В раскрывающемся списке Класс модели выберите Фильм (RazorPagesMovie.Models).
- В строке класса контекста данных выберите + знак (плюс) и измените созданное имя из RazorPagesMovie.
Models
. RazorPagesMovieContext в RazorPagesMovie.Данные. RazorPagesMovieContext. Это изменение не требуется. Оно создает класс контекста базы данных с правильным пространством имен. - Выберите Добавить.
Файл appsettings.json
обновляется с указанием строки подключения, используемой для подключения к локальной базе данных.
Создаваемые файлы
В процессе формирования шаблонов создаются и обновляются указанные ниже файлы.
- Pages/Movies: Create, Delete, Details, Edit и Index.
Data/RazorPagesMovieContext.cs
Обновлено
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'.
Вы пропустили шаг миграции.
Протестируйте ссылку Создать.
Примечание.
В поле
Price
нельзя вводить десятичные запятые. Чтобы обеспечить поддержку проверки jQuery для других языков, кроме английского, используйте вместо десятичной точки запятую (,), а для отображения данных в форматах для других языков, кроме английского, выполните глобализацию приложения. Инструкции по глобализации см. на сайте GitHub.Проверьте ссылки Изменить, Сведения и Удалить.
В следующем учебнике рассматриваются файлы, созданные с помощью формирования шаблонов.
Следующие шаги
ASP.NET Core