Не можете получить доступ и назначить значения в составную таблицу отношения многих ко многим через интерфейс? - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь разработать приложение 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; }
  }

Если кто-то, имеющий опыт в этом отношении, читает этот пост, пожалуйста, наставьте меня с правильной логикой или любым другим подходом, который поможет мне получить результат.

1 Ответ

0 голосов
/ 03 сентября 2018

Вам необходимо использовать foreach цикл для act, как показано ниже.

Я не уверен насчет синтаксиса, потому что он очень давно у меня есть работа над MVC, но вы можете сослаться на логику.

@foreach (var item in a.act)
{
    @Html.LabelFor(@item.Id)
    @Html.TextBoxFor(@item.Id, new { @class = "form-control" })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...