Поделиться через


Руководство. Улучшение проверки данных для ef Database First с помощью ASP.NET приложения MVC

С помощью MVC, Entity Framework и ASP.NET формирования шаблонов можно создать веб-приложение, предоставляющее интерфейс для существующей базы данных. В этой серии учебников показано, как автоматически создавать код, который позволяет пользователям отображать, изменять, создавать и удалять данные, хранящееся в таблице базы данных. Созданный код соответствует столбцам в таблице базы данных.

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

Изучив это руководство, вы:

  • Добавление заметок к данным
  • Добавление классов метаданных

Предварительные требования

Добавление заметок к данным

Как вы видели в предыдущем разделе, некоторые правила проверки данных автоматически применяются к введенным пользователем данным. Например, можно указать только число для свойства Grade. Чтобы указать дополнительные правила проверки данных, можно добавить заметки к данным в класс модели. Эти заметки применяются в веб-приложении для указанного свойства. Можно также применить атрибуты форматирования, которые изменяют способ отображения свойств. например, изменение значения, используемого для текстовых меток.

В этом руководстве вы добавите заметки к данным, чтобы ограничить длину значений, указанных для свойств FirstName, LastName и MiddleName. В базе данных эти значения ограничены 50 символами; однако в веб-приложении это ограничение символов в настоящее время не применяется. Если пользователь содержит более 50 символов для одного из этих значений, страница аварийно завершит работу при попытке сохранить значение в базе данных. Вы также ограничите оценок значениями от 0 до 4.

Выберите Модели>ContosoModel.edmx>ContosoModel.tt и откройте файл Student.cs . Добавьте следующий выделенный код в класс .

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Student
    {
        public Student()
        {
            this.Enrollments = new HashSet<Enrollment>();
        }
    
        public int StudentID { get; set; }
        [StringLength(50)]
        public string LastName { get; set; }
        [StringLength(50)]
        public string FirstName { get; set; }
        public Nullable<System.DateTime> EnrollmentDate { get; set; }
        [StringLength(50)]
        public string MiddleName { get; set; }
    
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
}

Откройте файл Enrollment.cs и добавьте следующий выделенный код.

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Enrollment
    {
        public int EnrollmentID { get; set; }
        [Range(0, 4)]
        public Nullable<decimal> Grade { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
    
        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }
}

Создайте решение.

Щелкните Список учащихся и выберите Изменить. При попытке ввести более 50 символов отображается сообщение об ошибке.

показать сообщение об ошибке

Назад на домашнюю страницу. Щелкните Список регистраций и выберите Изменить. Попробуйте предоставить оценку выше 4. Вы получите следующую ошибку: Поле Оценка должна быть в диапазоне от 0 до 4.

Добавление классов метаданных

Добавление атрибутов проверки непосредственно в класс модели работает, если вы не ожидаете изменения базы данных; Однако если база данных изменится и вам потребуется повторно создать класс модели, вы потеряете все атрибуты, примененные к классу модели. Этот подход может быть очень неэффективным и может потерять важные правила проверки.

Чтобы избежать этой проблемы, можно добавить класс метаданных, содержащий атрибуты . При связывании класса модели с классом метаданных эти атрибуты применяются к модели. При таком подходе класс модели можно повторно создать без потери всех атрибутов, примененных к классу метаданных.

В папке Models добавьте класс с именем Metadata.cs.

Замените код в файле Metadata.cs приведенным ниже кодом.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    public class StudentMetadata
    {
        [StringLength(50)]
        [Display(Name="Last Name")]
        public string LastName;

        [StringLength(50)]
        [Display(Name="First Name")]
        public string FirstName;

        [StringLength(50)]
        [Display(Name="Middle Name")]
        public string MiddleName;

        [Display(Name = "Enrollment Date")]
        public Nullable<System.DateTime> EnrollmentDate;
    }

    public class EnrollmentMetadata
    {
        [Range(0, 4)]
        public Nullable<decimal> Grade;
    }
}

Эти классы метаданных содержат все атрибуты проверки, которые ранее применялись к классам модели. Атрибут Display используется для изменения значения, используемого для текстовых меток.

Теперь необходимо связать классы модели с классами метаданных.

В папке Models добавьте класс с именем PartialClasses.cs.

Замените содержимое файла на код, приведенный ниже.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    [MetadataType(typeof(EnrollmentMetadata))]
    public partial class Enrollment
    {
    }
}

Обратите внимание, что каждый класс помечается partial как класс и соответствует имени и пространству имен как классу, который создается автоматически. Применив атрибут метаданных к разделяемым классу, вы гарантируете, что атрибуты проверки данных будут применены к автоматически созданному классу. Эти атрибуты не будут потеряны при повторном создании классов модели, так как атрибут метаданных применяется в разделяемых классах, которые не создаются повторно.

Чтобы повторно создать автоматически созданные классы, откройте файл ContosoModel.edmx . Еще раз щелкните правой кнопкой мыши область конструктора и выберите Обновить модель из базы данных. Несмотря на то, что вы не изменили базу данных, этот процесс будет повторно создавать классы. На вкладке Обновление выберите Таблицы и Готово.

Сохраните файл ContosoModel.edmx , чтобы применить изменения.

Откройте файл Student.cs или Enrollment.cs и обратите внимание, что атрибуты проверки данных, примененные ранее, больше не находятся в файле. Однако запустите приложение и обратите внимание, что правила проверки по-прежнему применяются при вводе данных.

Заключение

В этой серии приведен простой пример создания кода из существующей базы данных, который позволяет пользователям изменять, обновлять, создавать и удалять данные. Для создания проекта использовалась ASP.NET MVC 5, Entity Framework и ASP.NET формирование шаблонов.

Вводный пример разработки Code First см. в разделе начало работы с ASP.NET MVC 5.

Более сложный пример см. в статье Создание модели данных Entity Framework для ASP.NET приложения MVC 4. Обратите внимание, что API DbContext, используемый для работы с данными в Database First, совпадает с API, используемым для работы с данными в Code First. Даже если вы планируете использовать Database First, вы можете научиться обрабатывать более сложные сценарии, такие как чтение и обновление связанных данных, обработка конфликтов параллелизма и т. д. из учебника Code First. Единственное различие заключается в том, как создаются классы базы данных, контекста и классов сущностей.

Дополнительные ресурсы

Полный список заметок проверки данных, которые можно применить к свойствам и классам, см. в разделе System.ComponentModel.DataAnnotations.

Дальнейшие действия

Изучив это руководство, вы:

  • Добавлены заметки к данным
  • Добавлены классы метаданных

Сведения о развертывании веб-приложения и базы данных SQL в Служба приложений Azure см. в этом руководстве: