InvalidOperationException: тип сущности PassengerViewModel не был найден. Убедитесь, что тип сущности был добавлен в модель - PullRequest
0 голосов
/ 05 января 2020

Так что я пытаюсь заставить мой MVC веб-сайт использовать ViewModels вместо данных напрямую.

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

Я приведу список фрагментов кодов, которые я использую сейчас.

Это операция создания в контроллере

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Surname,FirstName,Email")] PassengerViewModel passenger)
{
    if (ModelState.IsValid)
    {
        _context.Add(passenger);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    return View(passenger);
}

Страница создания представляет собой нормальная страница создания, которую визуальная студия создала для меня. единственное изменение, которое я внес в него, - вместо использования данных модели. модель ссылается на мою ViewModel.

Затем в классе миграции. код такой:

migrationBuilder.CreateTable(
                name: "Passengers",
                schema: "WebSite",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    Surname = table.Column<string>(nullable: false),
                    FirstName = table.Column<string>(nullable: false),
                    Email = table.Column<string>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Passengers", x => x.Id);
                });

Буду признателен за любую помощь или руководство.

1 Ответ

2 голосов
/ 05 января 2020

Создайте экземпляр объекта, скопируйте значения модели, затем добавьте его (объект) в DbContext.

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Surname,FirstName,Email")] PassengerViewModel model)
{
    if (ModelState.IsValid)
    {
        Passenger passenger = new Passenger
        {
            Id = model.Id,
            FirstName = model.FirstName,
            Email = model.Email
        };
        await _context.Passengers.AddAsync(passenger);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    return View(passenger);
}
...