ASP.NET Ядро MVC: создать запись, связанную с автором, ранее созданную в другом представлении

#asp.net #entity-framework #asp.net-core #model-view-controller

#asp.net #entity-framework #asp.net-core #модель-представление-контроллер

Вопрос:

Я разрабатываю демонстрационное приложение, используя ASP.NET Ядро MVC ядро EF.

  1. У меня есть два класса моделей: Author и BlogPost;
  2. Отношение между ними — один (автор) ко многим (публикация в блоге);
  3. Я хотел бы создать автора (используя представление «AuthorForm.cshtml»), а затем немедленно перенаправиться в представление Blogpostform.cshtml») , используя ссылку на автора, созданную в качестве ссылки на создаваемый пост в блоге. Таким образом, мне не нужно будет выбирать автора для создания записи в блоге

Комментарии:

1. Не ясно, с какой проблемой вы столкнулись, есть ли у вас какой-либо код, который вы должны реализовать?

2. @NanYu Я только что отредактировал свой вопрос. Пожалуйста, проверьте это.

3. Как только вы создадите автора, просто передайте идентификатор контроллеру / действию BlogPostForm, с какой проблемой вы столкнулись?

4. Но я еще не знаю идентификатор, потому что он генерируется EF. И я не знаю, как это передать.

Ответ №1:

EF Core поможет заполнить значение столбца identity после SaveChangesAsync функции.Для exmaple :

Author.cs:

 public class Author
{
    public int AuthorId { get; set; }
    public string AuthorName { get; set; }

    public List<BlogPost> BlogPosts { get; set; }
}
  

BlogPost.cs:

 public class BlogPost
{
    public int BlogPostId { get; set; }
    public string BlogPostName { get; set; }


    public int AuthorId { get; set; }
    public Author Author { get; set; }
}
  

В действии «Создать автора» EF Core поможет заполнить идентификатор автора после сохранения :

 [HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("AuthorId,AuthorName")] Author author)
{
    if (ModelState.IsValid)
    {
        _context.Add(author);
        await _context.SaveChangesAsync();

        //here you will get id
        var id = author.AuthorId;

        //redirect to another action with parameter 
        return RedirectToAction(nameof(Index),new { id=id});
    }
    return View(author);
}
  

Затем вы перенаправите на другое действие / представление с параметром, как показано в приведенном выше коде.

Комментарии:

1. @AyodArune, пожалуйста, отметьте мой ответ как ответ, нажав зеленую кнопку проверки, которая может помочь другим, кто сталкивается с такой же проблемой