Я пытаюсь разработать приложение ASP.NET MVC с использованием C # и EF с подходом, основанным на коде.
У меня есть два класса: актеры и фильмы, которые имеют отношения многие ко многим (актер может быть во многих фильмах, фильм может иметь много актеров).
Все работает правильно, но я не могу получить доступ к промежуточной таблице (MoviesActors) через представление (эта таблица генерируется автоматически в результате отношения «многие ко многим» между актерами и фильмами). Я хочу получить доступ к этой таблице, чтобы я мог назначить правильные первичные ключи (например: я хочу назначить правильного актера для фильма и наоборот), чтобы определить такие вещи, как «В каких фильмах конкретный актер играл роль?» и "Каков звездный состав конкретного фильма?
Это мои модели:
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; }
}
Если кто-то, имеющий опыт в этом отношении, читает этот пост, пожалуйста, наставьте меня с правильной логикой или любым другим подходом, который поможет мне получить результат.