Часть 8. Добавление нового поля в приложение MVC ASP.NET Core

Примечание.

Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.

Внимание

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

В текущем выпуске см . версию .NET 8 этой статьи.

Автор: Рик Андерсон (Rick Anderson)

В этом разделе Entity Framework Code First Migrations используется для выполнения следующих задач:

  • Добавление нового поля в модель.
  • Перенос нового поля в базу данных.

Если вы используете EF Code First для автоматического создания базы данных, Code First:

  • Добавляет таблицу в базу данных для отслеживания схемы базы данных.
  • Проверяет, синхронизирована ли база данных с классами модели, из которых она была создана. Если синхронизация нарушена, EF вызывает исключение. Это позволяет упростить поиск проблем с согласованностью между базой данных и кодом.

Добавление свойства Rating в модель Movie

Добавьте свойство Rating в Models/Movie.cs:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcMovie.Models;

public class Movie
{
    public int Id { get; set; }
    public string? Title { get; set; }

    [Display(Name = "Release Date")]
    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }
    public string? Genre { get; set; }
    
    [Column(TypeName = "decimal(18, 2)")]
    public decimal Price { get; set; }
    public string? Rating {  get; set; }
}

Создание приложения

Нажмите клавиши CTRL+SHIFT B+

Поскольку в класс Movie было добавлено новое поле, необходимо обновить список привязки свойств, включив в него новое свойство. В файле MoviesController.cs обновите атрибут [Bind] для методов действия Create и Edit, включив свойство Rating:

[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]

Обновите шаблоны представлений, чтобы реализовать отображение, создание и редактирование нового свойства Rating в представлении браузера.

Измените файл /Views/Movies/Index.cshtml и добавьте поле Rating:

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].ReleaseDate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Genre)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Price)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Rating)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Movies!)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ReleaseDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Genre)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Price)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Rating)
                </td>
                <td>
                    <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

Обновите /Views/Movies/Create.cshtml, добавив поле Rating.

Вы можете скопировать и вставить предыдущую "группу форм" и дождаться автоматического обновления полей с помощью IntelliSense. IntelliSense работает со вспомогательными функциями тегов.

Разработчик ввел букву

Обновите остальные шаблоны.

Обновите класс SeedData так, чтобы он предоставлял значение нового столбца. Ниже показан пример изменения, которое необходимо выполнить для каждого new Movie.

new Movie
{
    Title = "When Harry Met Sally",
    ReleaseDate = DateTime.Parse("1989-1-11"),
    Genre = "Romantic Comedy",
    Rating = "R",
    Price = 7.99M
},

Для работы приложения необходимо обновить базу данных, включив в нее новое поле. Если он запущена, возникает следующее исключение SqlException:

SqlException: Invalid column name 'Rating'.

Эта ошибка связана с тем, что обновленный класс модели Movie отличается от схемы таблицы Movie в существующей базе данных. (В таблице базы данных отсутствует столбец Rating.)

Устранить эту ошибку можно несколькими способами:

  1. Можно с помощью Entity Framework автоматически удалить и повторно создать базу данных на основе новой схемы класса модели. Этот подход удобен на ранних стадиях цикла разработки, когда все действия осуществляются с тестовой базой данных. В этом случае развитие модели и схемы базы данных осуществляется одновременно. Недостатком такого подхода является потеря существующих данных в базе, в связи с чем использовать его в рабочей базе данных невозможно. При разработке приложения часто используется инициализатор для автоматического заполнения базы тестовыми данными. Это хороший подход на ранних этапах разработки и при использовании SQLite.

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

  3. Можно обновить схему базы данных с помощью Code First Migrations.

В этом руководстве используется Code First Migrations.

В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet > Консоль диспетчера пакетов.

Меню PMC

В PMC введите следующие команды:

Add-Migration Rating
Update-Database

Команда Add-Migration указывает платформе миграции на необходимость проверить текущую модель Movie с текущей схемой базы данных Movie и создать нужный код для переноса базы данных в новую модель.

В качестве имени файла переноса используется произвольное имя "Rating". Рекомендуется присваивать этому файлу понятное имя.

Если удалить все записи из базы данных, при инициализации она будет заполнена значениями и в нее будет включено поле Rating.

Запустите приложение и проверьте возможность создания, редактирования и отображения фильмов с использованием поля Rating.

В этом разделе Entity Framework Code First Migrations используется для выполнения следующих задач:

  • Добавление нового поля в модель.
  • Перенос нового поля в базу данных.

Если вы используете EF Code First для автоматического создания базы данных, Code First:

  • Добавляет таблицу в базу данных для отслеживания схемы базы данных.
  • Проверяет, синхронизирована ли база данных с классами модели, из которых она была создана. Если синхронизация нарушена, EF вызывает исключение. Это позволяет упростить поиск проблем с согласованностью между базой данных и кодом.

Добавление свойства Rating в модель Movie

Добавьте свойство Rating в Models/Movie.cs:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcMovie.Models;

public class Movie
{
    public int Id { get; set; }
    public string? Title { get; set; }

    [Display(Name = "Release Date")]
    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }
    public string? Genre { get; set; }
    
    [Column(TypeName = "decimal(18, 2)")]
    public decimal Price { get; set; }
    public string? Rating {  get; set; }
}

Создание приложения

Нажмите клавиши CTRL+SHIFT B+

Поскольку в класс Movie было добавлено новое поле, необходимо обновить список привязки свойств, включив в него новое свойство. В файле MoviesController.cs обновите атрибут [Bind] для методов действия Create и Edit, включив свойство Rating:

[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]

Обновите шаблоны представлений, чтобы реализовать отображение, создание и редактирование нового свойства Rating в представлении браузера.

Измените файл /Views/Movies/Index.cshtml и добавьте поле Rating:

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].ReleaseDate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Genre)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Price)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies![0].Rating)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Movies!)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ReleaseDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Genre)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Price)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Rating)
                </td>
                <td>
                    <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

Обновите /Views/Movies/Create.cshtml, добавив поле Rating.

Вы можете скопировать и вставить предыдущую "группу форм" и дождаться автоматического обновления полей с помощью IntelliSense. IntelliSense работает со вспомогательными функциями тегов.

Разработчик ввел букву

Обновите остальные шаблоны.

Обновите класс SeedData так, чтобы он предоставлял значение нового столбца. Ниже показан пример изменения, которое необходимо выполнить для каждого new Movie.

new Movie
{
    Title = "When Harry Met Sally",
    ReleaseDate = DateTime.Parse("1989-1-11"),
    Genre = "Romantic Comedy",
    Rating = "R",
    Price = 7.99M
},

Для работы приложения необходимо обновить базу данных, включив в нее новое поле. Если он запущена, возникает следующее исключение SqlException:

SqlException: Invalid column name 'Rating'.

Эта ошибка связана с тем, что обновленный класс модели Movie отличается от схемы таблицы Movie в существующей базе данных. (В таблице базы данных отсутствует столбец Rating.)

Устранить эту ошибку можно несколькими способами:

  1. Можно с помощью Entity Framework автоматически удалить и повторно создать базу данных на основе новой схемы класса модели. Этот подход удобен на ранних стадиях цикла разработки, когда все действия осуществляются с тестовой базой данных. В этом случае развитие модели и схемы базы данных осуществляется одновременно. Недостатком такого подхода является потеря существующих данных в базе, в связи с чем использовать его в рабочей базе данных невозможно. При разработке приложения часто используется инициализатор для автоматического заполнения базы тестовыми данными. Это хороший подход на ранних этапах разработки и при использовании SQLite.

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

  3. Можно обновить схему базы данных с помощью Code First Migrations.

В этом руководстве используется Code First Migrations.

В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet > Консоль диспетчера пакетов.

Меню PMC

В PMC введите следующие команды:

Add-Migration Rating
Update-Database

Команда Add-Migration указывает платформе миграции на необходимость проверить текущую модель Movie с текущей схемой базы данных Movie и создать нужный код для переноса базы данных в новую модель.

В качестве имени файла переноса используется произвольное имя "Rating". Рекомендуется присваивать этому файлу понятное имя.

Если удалить все записи из базы данных, при инициализации она будет заполнена значениями и в нее будет включено поле Rating.

Запустите приложение и проверьте возможность создания, редактирования и отображения фильмов с использованием поля Rating.

В этом разделе Entity Framework Code First Migrations используется для выполнения следующих задач:

  • Добавление нового поля в модель.
  • Перенос нового поля в базу данных.

Если вы используете EF Code First для автоматического создания базы данных, Code First:

  • Добавляет таблицу в базу данных для отслеживания схемы базы данных.
  • Проверяет, синхронизирована ли база данных с классами модели, из которых она была создана. Если синхронизация нарушена, EF вызывает исключение. Это позволяет упростить поиск проблем с согласованностью между базой данных и кодом.

Добавление свойства Rating в модель Movie

Добавьте свойство Rating в Models/Movie.cs:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string? Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string? Genre { get; set; }

        [Column(TypeName = "decimal(18, 2)")]
        public decimal Price { get; set; }
        public string? Rating {  get; set; }
    }
}

Создание приложения

CTRL + SHIFT + B

Поскольку в класс Movie было добавлено новое поле, необходимо обновить список привязки свойств, включив в него новое свойство. В файле MoviesController.cs обновите атрибут [Bind] для методов действия Create и Edit, включив свойство Rating:

[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]

Обновите шаблоны представлений, чтобы реализовать отображение, создание и редактирование нового свойства Rating в представлении браузера.

Измените файл /Views/Movies/Index.cshtml и добавьте поле Rating:

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Movies[0].Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies[0].ReleaseDate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies[0].Genre)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies[0].Price)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movies[0].Rating)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Movies)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ReleaseDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Genre)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Price)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Rating)
                </td>
                <td>
                    <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

Обновите /Views/Movies/Create.cshtml, добавив поле Rating.

Вы можете скопировать и вставить предыдущую "группу форм" и дождаться автоматического обновления полей с помощью IntelliSense. IntelliSense работает со вспомогательными функциями тегов.

Разработчик ввел букву

Обновите остальные шаблоны.

Обновите класс SeedData так, чтобы он предоставлял значение нового столбца. Ниже показан пример изменения, которое необходимо выполнить для каждого new Movie.

new Movie
{
    Title = "When Harry Met Sally",
    ReleaseDate = DateTime.Parse("1989-1-11"),
    Genre = "Romantic Comedy",
    Rating = "R",
    Price = 7.99M
},

Для работы приложения необходимо обновить базу данных, включив в нее новое поле. Если он запущена, возникает следующее исключение SqlException:

SqlException: Invalid column name 'Rating'.

Эта ошибка связана с тем, что обновленный класс модели Movie отличается от схемы таблицы Movie в существующей базе данных. (В таблице базы данных отсутствует столбец Rating.)

Устранить эту ошибку можно несколькими способами:

  1. Можно с помощью Entity Framework автоматически удалить и повторно создать базу данных на основе новой схемы класса модели. Этот подход удобен на ранних стадиях цикла разработки, когда все действия осуществляются с тестовой базой данных. В этом случае развитие модели и схемы базы данных осуществляется одновременно. Недостатком такого подхода является потеря существующих данных в базе, в связи с чем использовать его в рабочей базе данных невозможно. При разработке приложения часто используется инициализатор для автоматического заполнения базы тестовыми данными. Это хороший подход на ранних этапах разработки и при использовании SQLite.

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

  3. Можно обновить схему базы данных с помощью Code First Migrations.

В этом руководстве используется Code First Migrations.

В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet > Консоль диспетчера пакетов.

Меню PMC

В PMC введите следующие команды:

Add-Migration Rating
Update-Database

Команда Add-Migration указывает платформе миграции на необходимость проверить текущую модель Movie с текущей схемой базы данных Movie и создать нужный код для переноса базы данных в новую модель.

В качестве имени файла переноса используется произвольное имя "Rating". Рекомендуется присваивать этому файлу понятное имя.

Если удалить все записи из базы данных, при инициализации она будет заполнена значениями и в нее будет включено поле Rating.

Запустите приложение и проверьте возможность создания, редактирования и отображения фильмов с использованием поля Rating.

В этом разделе Entity Framework Code First Migrations используется для выполнения следующих задач:

  • Добавление нового поля в модель.
  • Перенос нового поля в базу данных.

Если вы используете EF Code First для автоматического создания базы данных, Code First:

  • Добавляет таблицу в базу данных для отслеживания схемы базы данных.
  • Проверяет, синхронизирована ли база данных с классами модели, из которых она была создана. Если синхронизация нарушена, EF вызывает исключение. Это позволяет упростить поиск проблем с согласованностью между базой данных и кодом.

Добавление свойства Rating в модель Movie

Добавьте свойство Rating в Models/Movie.cs:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }

        [Column(TypeName = "decimal(18, 2)")]
        public decimal Price { get; set; }
        public string Rating { get; set; }
    }
}

Создание приложения

CTRL + SHIFT + B

Поскольку в класс Movie было добавлено новое поле, необходимо обновить список привязки свойств, включив в него новое свойство. В файле MoviesController.cs обновите атрибут [Bind] для методов действия Create и Edit, включив свойство Rating:

[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]

Обновите шаблоны представлений, чтобы реализовать отображение, создание и редактирование нового свойства Rating в представлении браузера.

Измените файл /Views/Movies/Index.cshtml и добавьте поле Rating:

<thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].ReleaseDate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Genre)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Price)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Rating)
        </th>
        <th></th>
    </tr>
</thead>
<tbody>
    @foreach (var item in Model.Movies)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ReleaseDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Genre)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Rating)
            </td>
            <td>

Обновите /Views/Movies/Create.cshtml, добавив поле Rating.

Вы можете скопировать и вставить предыдущую "группу форм" и дождаться автоматического обновления полей с помощью IntelliSense. IntelliSense работает со вспомогательными функциями тегов.

Разработчик ввел букву

Обновите остальные шаблоны.

Обновите класс SeedData так, чтобы он предоставлял значение нового столбца. Ниже показан пример изменения, которое необходимо выполнить для каждого new Movie.

new Movie
{
    Title = "When Harry Met Sally",
    ReleaseDate = DateTime.Parse("1989-1-11"),
    Genre = "Romantic Comedy",
    Rating = "R",
    Price = 7.99M
},

Для работы приложения необходимо обновить базу данных, включив в нее новое поле. Если он запущена, возникает следующее исключение SqlException:

SqlException: Invalid column name 'Rating'.

Эта ошибка связана с тем, что обновленный класс модели Movie отличается от схемы таблицы Movie в существующей базе данных. (В таблице базы данных отсутствует столбец Rating.)

Устранить эту ошибку можно несколькими способами:

  1. Можно с помощью Entity Framework автоматически удалить и повторно создать базу данных на основе новой схемы класса модели. Этот подход удобен на ранних стадиях цикла разработки, когда все действия осуществляются с тестовой базой данных. В этом случае развитие модели и схемы базы данных осуществляется одновременно. Недостатком такого подхода является потеря существующих данных в базе, в связи с чем использовать его в рабочей базе данных невозможно. При разработке приложения часто используется инициализатор для автоматического заполнения базы тестовыми данными. Это хороший подход на ранних этапах разработки и при использовании SQLite.

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

  3. Можно обновить схему базы данных с помощью Code First Migrations.

В этом руководстве используется Code First Migrations.

В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet > Консоль диспетчера пакетов.

Меню PMC

В PMC введите следующие команды:

Add-Migration Rating
Update-Database

Команда Add-Migration указывает платформе миграции на необходимость проверить текущую модель Movie с текущей схемой базы данных Movie и создать нужный код для переноса базы данных в новую модель.

В качестве имени файла переноса используется произвольное имя "Rating". Рекомендуется присваивать этому файлу понятное имя.

Если удалить все записи из базы данных, при инициализации она будет заполнена значениями и в нее будет включено поле Rating.

Запустите приложение и проверьте возможность создания, редактирования и отображения фильмов с использованием поля Rating.

В этом разделе Entity Framework Code First Migrations используется для выполнения следующих задач:

  • Добавление нового поля в модель.
  • Перенос нового поля в базу данных.

Если вы используете EF Code First для автоматического создания базы данных, Code First:

  • Добавляет таблицу в базу данных для отслеживания схемы базы данных.
  • Проверяет, синхронизирована ли база данных с классами модели, из которых она была создана. Если синхронизация нарушена, EF вызывает исключение. Это позволяет упростить поиск проблем с согласованностью между базой данных и кодом.

Добавление свойства Rating в модель Movie

Добавьте свойство Rating в Models/Movie.cs:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string Title { get; set; }

        [Display(Name = "Release Date")]
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }

        [Column(TypeName = "decimal(18, 2)")]
        public decimal Price { get; set; }
        public string Rating { get; set; }
    }
}

Создание приложения

CTRL + SHIFT + B

Поскольку в класс Movie было добавлено новое поле, необходимо обновить список привязки свойств, включив в него новое свойство. В файле MoviesController.cs обновите атрибут [Bind] для методов действия Create и Edit, включив свойство Rating:

[Bind("Id,Title,ReleaseDate,Genre,Price,Rating")]

Обновите шаблоны представлений, чтобы реализовать отображение, создание и редактирование нового свойства Rating в представлении браузера.

Измените файл /Views/Movies/Index.cshtml и добавьте поле Rating:

<thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].ReleaseDate)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Genre)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Price)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Movies[0].Rating)
        </th>
        <th></th>
    </tr>
</thead>
<tbody>
    @foreach (var item in Model.Movies)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ReleaseDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Genre)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Rating)
            </td>
            <td>

Обновите /Views/Movies/Create.cshtml, добавив поле Rating.

Вы можете скопировать и вставить предыдущую "группу форм" и дождаться автоматического обновления полей с помощью IntelliSense. IntelliSense работает со вспомогательными функциями тегов.

Разработчик ввел букву

Обновите остальные шаблоны.

Обновите класс SeedData так, чтобы он предоставлял значение нового столбца. Ниже показан пример изменения, которое необходимо выполнить для каждого new Movie.

new Movie
{
    Title = "When Harry Met Sally",
    ReleaseDate = DateTime.Parse("1989-1-11"),
    Genre = "Romantic Comedy",
    Rating = "R",
    Price = 7.99M
},

Для работы приложения необходимо обновить базу данных, включив в нее новое поле. Если он запущена, возникает следующее исключение SqlException:

SqlException: Invalid column name 'Rating'.

Эта ошибка связана с тем, что обновленный класс модели Movie отличается от схемы таблицы Movie в существующей базе данных. (В таблице базы данных отсутствует столбец Rating.)

Устранить эту ошибку можно несколькими способами:

  1. Можно с помощью Entity Framework автоматически удалить и повторно создать базу данных на основе новой схемы класса модели. Этот подход удобен на ранних стадиях цикла разработки, когда все действия осуществляются с тестовой базой данных. В этом случае развитие модели и схемы базы данных осуществляется одновременно. Недостатком такого подхода является потеря существующих данных в базе, в связи с чем использовать его в рабочей базе данных невозможно. При разработке приложения часто используется инициализатор для автоматического заполнения базы тестовыми данными. Это хороший подход на ранних этапах разработки и при использовании SQLite.

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

  3. Можно обновить схему базы данных с помощью Code First Migrations.

В этом руководстве используется Code First Migrations.

В меню Сервис последовательно выберите пункты Диспетчер пакетов NuGet > Консоль диспетчера пакетов.

Меню PMC

В PMC введите следующие команды:

Add-Migration Rating
Update-Database

Команда Add-Migration указывает платформе миграции на необходимость проверить текущую модель Movie с текущей схемой базы данных Movie и создать нужный код для переноса базы данных в новую модель.

В качестве имени файла переноса используется произвольное имя "Rating". Рекомендуется присваивать этому файлу понятное имя.

Если удалить все записи из базы данных, при инициализации она будет заполнена значениями и в нее будет включено поле Rating.

Запустите приложение и проверьте возможность создания, редактирования и отображения фильмов с использованием поля Rating.