Я пытаюсь разработать приложение с использованием Asp.net C #, MVC, Codefirst.
У меня есть два класса актеров и фильмов, которые имеют много-много отношений. (У актера может быть много фильмов, у фильма может быть много актеров)
Теперь я столкнулся с проблемой, я могу получить данные из обеих таблиц, но не так, как ожидалось, я думаю, что где-то что-то не так с логикой моего кода.
Например, я могу получить список фильмов из базы данных, и когда я нажимаю на каждый фильм, он перенаправляет меня на страницу, которая принадлежит этому конкретному фильму, что имеет смысл до этого момента, но теперь я хочу получить список актеров, которые сыграли роль в этом конкретном фильме, и здесь я провалюсь. (Я могу получить весь список актеров, которые существуют в базе данных, но не конкретные актеры, которые сыграли роль в определенном фильме).
Это мои модели:
Это актерский класс:
public class Actors
{
public int Id { get; set; }
public string actor_name { get; set; }
public string country_of_birth { get; set; }
}
А это класс фильмов:
public class Movies
{
public int Id { get; set; }
public string movie_title { get; set; }
public string genre { get; set; }
}
Это контроллер:
public ActionResult Index()
{
var mv = _context.mvz;
if (mv==null)
{
return Content("Nothing found in database");
}
return View(mv);
}
public ActionResult Details(int? Id)
{
var dtl = _context.mvz.SingleOrDefault(a=> a.Id == Id);
var vm = new MoviesViewModel()
{
mvz = dtl,
};
if (vm==null)
{
return Content("Nothing Found!");
}
return View(vm);
}
Это индексный вид, который показывает список фильмов и содержит ссылку на детали каждого фильма в отдельности:
@model IEnumerable<ManyToMany_FinalProject.Models.Movies>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h5>List of Movies</h5>
<table class="table table-bordered table-hover table-responsive">
<thead>
<tr>
<th>Id</th>
<th>Title</th>
</tr>
</thead>
@foreach (var movie in Model)
{
<tbody>
<tr>
<td>@movie.Id</td>
<td>@Html.ActionLink(movie.movie_title,"Details","Movies",new { Id = @movie.Id},null)</td>
</tr>
</tbody>
}
Это подробное представление, которое должно отображать подробную информацию о каждом фильме, в частности, оно должно отображать список актеров, сыгравших роль в этом конкретном фильме.
@model ManyToMany_FinalProject.ViewModel.MoviesViewModel
@{
ViewBag.Title = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h5>Details of @Model.mvz.movie_title</h5>
<table class="table table-bordered table-hover table-responsive">
<thead>
<tr>
<th>Id</th>
<th>Title</th>
<th>Genre</th>
</tr>
</thead>
<tbody>
<tr>
<td>@Model.mvz.Id</td>
<td>@Model.mvz.movie_title</td>
<td>@Model.mvz.genre</td>
</tr>
</tbody>
<h5>Star cast of @Model.mvz.movie_title</h5>
<table class="table table-bordered table-hover table-responsive">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Country</th>
</tr>
</thead>
@foreach (var actor in Model.act)
{
<tbody>
<tr>
<td>@actor.Id</td>
<td>@actor.actor_name</td>
<td>@actor.country_of_birth</td>
</tr>
</tbody>
}
</table>
И, наконец, это модель представления:
public class MoviesViewModel
{
public Movies mvz { get; set; }
public List<Actors> act { get; set; }
public MoviesViewModel()
{
mvz = new Movies();
act = new List<Actors>();
}
}
Я знаю, что что-то не так с логикой LINQ, которую я пишу, чтобы получить список актеров в классе контроллера.
Если кто-то, имеющий опыт в этом отношении, читает этот пост, пожалуйста, наведите мне правильную логику, которую я должен использовать для LINQ, или любой другой подход, который поможет мне получить результат.