【发布时间】:2018-09-01 11:40:58
【问题描述】:
我正在尝试使用 Asp.net C#、MVC、Codefirst 方法开发应用程序。
我有两个类,分别是 Actors 和 Movies,它们之间有多对多的关系。 (一个演员可以有很多电影,一部电影可以有很多演员)
现在我遇到了一个问题,我可以从两个表中检索数据,但不如预期的那样,我认为我的代码逻辑的某个地方出了点问题。
例如,我可以从数据库中检索电影列表,当我单击每部电影时,它会将我重定向到属于该特定电影的页面,这在这一点上是有意义的,但现在我想检索列表在这部电影中扮演角色的演员,我失败了。 (我可以检索数据库中存在的完整演员列表,但不能检索在特定电影中扮演角色的特定演员)。
这些是我的模型:
这是 Actor 类:
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 的正确逻辑或任何其他有助于我获得结果的方法。
【问题讨论】:
-
您必须将两个模型的关系设置为
pk和fk
标签: c# sql-server asp.net-mvc linq ef-code-first