我正在尝试使用C#和EF以代码优先方法开发ASP.NET MVC应用程序。
我有两个类:演员和电影有多对多关系(一个演员可以在很多电影,一个电影可以有很多演员)。
一切正常,但我无法通过视图访问中间(MoviesActors)表(此表由于Actors和Movies之间的多对多关系而自动生成)。我想访问这个表,以便我可以分配正确的主键(例如:我想将正确的actor分配给电影,反之亦然),以确定诸如“特定演员扮演角色的电影中的角色?”之类的内容。和“特定电影的明星演员是什么?
这些是我的模特:
public class Actors
{
public Actors()
{
this.mvz = new HashSet<Movies>();
}
public int Id { get; set; }
public string actor_name { get; set; }
public string country { get; set; }
public virtual ICollection<Movies> mvz { get; set; }
}
这是电影模型
public class Movies
{
public Movies()
{
this.actz = new HashSet<Actors>();
}
public int Id { get; set; }
public string Movie_title { get; set; }
public string genre { get; set; }
public virtual ICollection<Actors> actz { get; set; }
}
如您所见,两个模型之间存在多对多的关系,因此在包含复合键的数据库中生成第三个表。
到目前为止一切正常,但问题是我无法通过前端为复合键表分配值,虽然我可以从后端手动分配这些值。
我想问一下我的方法是否正确,我的意思是在现实世界的应用程序中,我们是否必须访问复合密钥表并分配值,还是有更好的方法来解决这个问题?
这是控制器:
public ActionResult DataEntry()
{
return View();
}
[HttpPost]
public ActionResult Add(??? mva)
{
_context.act.Add(mva.act);
_context.mvz.Add(mva.mvz);
_context.SaveChanges();
return RedirectToAction("Index","Actors");
}
以下是观点:
@model
Many_To_Many_Relationship_Latest.ViewModel.MoviesActorsViewModel
@{
ViewBag.Title = "DataEntry";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h5>Assign Actors to a particular Movie From Here</h5>
@using (Html.BeginForm("Add","MoviesActors"))
{
<div class="form-group">
@Html.LabelFor(a=> a.mvz.Id)
@Html.TextBoxFor(a=> a.mvz.Id, new { @class="forcontrol"})
</div>
<div class="form-group">
@Html.LabelFor(a => a.act.Id)
@Html.TextBoxFor(a => a.act.Id, new { @class = "form-control" })
</div>
<button type="submit" class="btn btn-primary">Save</button>
}
这是ViewModel
public class MoviesActorsViewModel
{
public Movies mvz { get; set; }
public IEnumerable<Actors> act { get; set; }
}
如果有这方面的专业知识的人正在阅读这篇文章,请用正确的逻辑或任何其他方法指导我,以帮助我获得结果。
你需要在foreach
like下面使用act
循环。
我不确定语法,因为它很长时间以来我都在研究MVC,但你可以参考逻辑。
@foreach (var item in a.act)
{
@Html.LabelFor(@item.Id)
@Html.TextBoxFor(@item.Id, new { @class = "form-control" })
}