Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Это не последняя версия этой статьи. Текущий выпуск можно найти в версии этой статьи о .NET 10.
Эта статья является пятой частью руководства по приложению базы данных фильма Blazor, которая учит вас основам создания ASP.NET Core Blazor Web App с функциями управления базой данных фильмов.
В этой части серии учебников объясняется, как метаданные Movie модели используются для проверки ввода пользователей в формах, которые создают и редактируют фильмы.
Проверка с помощью заметок данных
Правила проверки задаются в классе модели с помощью заметок данных. В следующем списке показаны некоторые атрибуты System.ComponentModel.DataAnnotations для проверки пользовательского ввода в свойствах public модели формы.
-
[Required]: требуется, чтобы пользователь предоставил значение. -
[StringLength]: указывает минимальную и максимальную длину символов. Обратите внимание, что если передатьMinimumLengthатрибуту, это не сделает строку обязательной (необходимо применить атрибут[Required]). -
[RegularExpression]: укажите шаблон, соответствующий входным данным пользователя. -
[Range]: укажите минимальные и максимальные значения.
Типы значений, такие как decimal, int, float, DateOnlyTimeOnlyиDateTime, по сути, являются обязательными. Применение атрибута[Required] к типам значений не требуется.
Дополнительные аннотации данных, которые можно использовать в формах, охватываются справочной документацией Blazor.
Добавьте проверку в модель Movie
Добавьте следующие аннотации данных для свойств класса Movie. Чтобы обновить все свойства одновременно, можно скопировать и вставить весь Models/Movie.cs файл, который отображается после следующего примера кода.
+ [Required]
+ [StringLength(60, MinimumLength = 3)]
public string? Title { get; set; }
+ [Required]
+ [StringLength(30)]
+ [RegularExpression(@"^[A-Z]+[a-zA-Z()\s-]*$")]
public string? Genre { get; set; }
+ [Range(0, 100)]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
Models/Movie.cs файл после применения предыдущих аннотаций данных к свойствам:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace BlazorWebAppMovies.Models;
public class Movie
{
public int Id { get; set; }
[Required]
[StringLength(60, MinimumLength = 3)]
public string? Title { get; set; }
public DateOnly ReleaseDate { get; set; }
[Required]
[StringLength(30)]
[RegularExpression(@"^[A-Z]+[a-zA-Z()\s-]*$")]
public string? Genre { get; set; }
[Range(0, 100)]
[DataType(DataType.Currency)]
[Column(TypeName = "decimal(18, 2)")]
public decimal Price { get; set; }
}
Предыдущие правила проверки предназначены только для демонстрации и не являются оптимальными для рабочей системы. Например, предыдущая проверка предотвращает ввод названия фильма, состоящего лишь из одного или двух символов, и запрещает использование дополнительных специальных символов в названии жанра фильма.
EF Core Создание миграции и обновление базы данных
Схема модели данных определяет, как данные упорядочены и подключены в реляционной базе данных.
Добавление заметок данных в Movie класс в предыдущем разделе не приводит к автоматическим изменениям схемы базы данных.
Просмотрите аннотации, примененные к свойству Title.
[Required]
[StringLength(60, MinimumLength = 3)]
public string? Title { get; set; }
Разница между свойством модели и схемой базы данных приведена в следующей таблице. Ни одно ограничение не совпадает после применения аннотации данных к модели Movie.
| Ограничение | Свойство model Title |
Столбец базы данных Title |
|---|---|---|
| Максимальная длина | 60 символов | Пары байтов до 2 ГБ†NVARCHAR (MAX) |
| Обязательное поле |
Да[Required] |
НетNULL разрешено в столбце. |
†Символьные колонки базы данных определяются размером Title свойства Movie модели и схемы базы данных для Title столбца заключается в том, что около 2 ГБ хранимых байт-пар в базе данных гораздо превышает 60 символьных ограничений для свойства. Схема базы данных должна быть изменена вниз , чтобы она соответствовала ограничению приложения.
Чтобы сопоставить Movie длину значения свойства модели Title в приложении, база данных должна задать NVARCHAR (60) размер столбца Title. Разница в схеме не приводит EF Core к возникновению исключения при использовании приложения, так как заголовок фильма длиной 60 символов, публикуемый пользователем, вписывается в пределы ограничения базы данных на размер заголовка, составляющего приблизительно 2 ГБ. Однако рассмотрим обратную ситуацию, когда свойству модели присваивается ограничение, превышающее то, что позволяет база данных, и пользователь публикует слишком длинную строку для столбца символов базы данных: исключение генерируется базой данных или данные обрезаются, когда пользователь отправляет значение. Модели приложения всегда должны соответствовать схеме базы данных, так как неправильная схема может привести к исключениям и хранилищу неправильных данных.
Несмотря на то, что свойство является ссылочным типом, допускающим null (nullable reference type, NRT), как обозначено на типе ?string (string?), база данных не должна хранить значение NULL в своем столбце Title из-за ограничения модели Required. При обновлении схемы базы данных на следующем шаге столбец базы данных Title должен отражать NOT NULL для столбца Title, чтобы соответствовать свойству. Важно отметить, что только потому, что свойство модели является NRT и может содержать null значение в коде не означает, что схема столбца базы данных должна иметь значение NULL (NULL разрешено). Это независимые условия, используемые для различных целей: NRT используются для предотвращения ошибок кодирования с типами, допускающими значение NULL, в то время как схема базы данных отражает точный тип и размер хранимых данных.
Чтобы согласовать модель и схему базы данных, создайте и примените EF Coreмиграцию базы данных с именем, идентифицирующим изменения миграции. Имя миграции аналогично сообщению фиксации в системе управления версиями. В следующих примерах команд имя миграции "NewMovieDataAnnotations" отражает добавление новых аннотаций данных в модель Movie.
Внимание
Убедитесь, что приложение не запущено для следующих действий.
Для остановки приложения при использовании Visual Studio требуется закрыть окно браузера.
При использовании VS Code закройте окно браузера и остановите приложение в VS Code с помощью Выполнить>Остановить отладку или нажав клавиши Shift+F5 на клавиатуре.
При использовании интерфейса командной строки .NET закройте окно браузера и остановите приложение в командной оболочке с Ctrl+C.
В Visual Studio Обозреватель решений дважды щелкните Connected Services. В области зависимостей служб выберите многоточие (...), а затем выберите Добавить миграцию в области SQL Server Express LocalDB.
Присвойте миграции названиеNewMovieDataAnnotations для её описания. Дождитесь загрузки контекста базы данных в поле имен классов DbContext. Нажмите кнопку "Готово ", чтобы создать миграцию. Нажмите кнопку "Закрыть", когда операция завершится.
Снова выберите многоточие (...), а затем команду "Обновить базу данных ".
Откроется диалоговое окно для обновления базы данных с последней миграцией. Дождитесь обновления поля имен классов DbContext и загрузки предыдущих миграций. Нажмите кнопку Готово. Нажмите кнопку "Закрыть", когда операция завершится.
Используйте следующую команду в Терминале (меню Терминал>Новый терминал), чтобы добавить миграцию для новых аннотаций данных.
dotnet ef migrations add NewMovieDataAnnotations
Чтобы применить миграцию к базе данных, выполните следующую команду:
dotnet ef database update
Чтобы добавить миграцию для новых заметок данных, выполните следующую команду в командной оболочке, открытой в корневой папке проекта:
dotnet ef migrations add NewMovieDataAnnotations
Чтобы применить миграцию к базе данных, выполните следующую команду:
dotnet ef database update
После применения миграции свойство модели и схема базы данных совпадают, что кратко изложено в следующей таблице.
| Ограничение | Свойство model Title |
Столбец базы данных Title |
|---|---|---|
| Максимальная длина | 60 символов | Разрешены 60 пар байтов†.NVARCHAR (60) |
| Обязательное поле |
Да[Required] |
ДаNOT NULL указан для столбца. |
†Шестьдесят (60) пар байтов составляет 60 символов, если для хранения названия фильма используется по одной паре байтов на символ. Это верно при использовании символов, определенных в диапазоне Юникода от 0 до 65 535.
Устранение неполадок с помощью готового примера
Если вы столкнулись с проблемой при выполнении руководства, которую невозможно устранить, следуя тексту, сравните ваш код с завершенным проектом в репозитории примеров Blazor.
Blazor примеры GitHub репозитория (dotnet/blazor-samples)
Выберите последнюю папку версии. Пример папки для проекта этого руководства называется BlazorWebAppMovies.
Дополнительные ресурсы
- Спомогатели тегов в формах в ASP.NET Core
- Глобализация и локализация в ASP.NET Core
- Помощники тегов в ASP.NET Core
- вспомогательные функции тегов Author в ASP.NET Core
- Обзор миграций (EF Core документация)
- nchar и nvarchar (Transact-SQL) (документация по SQL Server)
- Blazor расширенные формы
Следующие шаги
ASP.NET Core