2015-01-24 2 views
1

Я довольно новичок в MVC, и у меня возникают проблемы с работой с нормализованной моделью данных (просто список фильмов и их список броска). У меня есть настройки модели следующие три данных (упрощенный), которая является одним из основных многие-ко-многим отношений:MVC .NET - нормализованная модель данных

public class Movie 
{ 
     public int Movie_Id { get; set; } 
     public string Title { get; set; } 
     public string Director { get; set; } 
     public DateTime Release_Date { get; set; } 

     public MovieCast movieCast { get; set; } 
} 

public class MovieCast 
{ 
     public int Movie_Actor_Id { get; set; } 
     public int Movie_Id { get; set; } 
     public int Actor_Id { get; set; } 

     public Movie movie { get; set; } 
     public Actor actor { get; set; } 

} 

public class Actor 
{ 
     public int Actor_Id { get; set; } 
     public string First_Name { get; set; } 
     public string Last_Name { get; set; } 
     public string Gender { get; set; } 
     public DateTime Birthdate { get; set; } 

     public MovieCast movieCast { get; set; } 
} 

Я ищу, чтобы отобразить весь список актеров от контроллера MovieCast. В файле Index.cshtml У меня есть следующие

<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.Movie_Id) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.Actor_Id) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.actor.First_Name) 
    </th> 
    <th></th> 
</tr> 

Окончательный DisplayNameFor дает мне ошибку, говоря, что «MovieCast» не содержит определения для «актера», даже если он явно объявлен в модели.

Есть ли у кого-нибудь идеи, или мне нужно переосмыслить решение?

+1

Как выглядит ваш код действия? Я предполагаю, что вы не создали все экземпляры и «актер» является «нулевым» – Justin

+0

В его простейшей форме, это выглядит следующим образом: общественного индекс ActionResult() { возвращение View (новый список ()) ; } – Cailean

+0

Если это так, вы не создаете экземпляр актера, поэтому он возвращает «null», если это «null», никакие значения не могут быть извлечены из него. – Justin

ответ

0

Я понимаю, что у фильма есть MovieCast, который является списком актеров, которые участвовали в фильме.

Кроме того, я бы никогда не использовал реляционно-подобную структуру в своих классах ... Я предпочитаю использовать более объектно-ориентированную структуру.

Я бы упростить его:

public class Movie 
{ 
    public int Id {get;set;} 
    public string Title {get;set;} 
    public string Director {get;set;} 
    public DateTime ReleaseDate {get;set;} 

    public List<Actor> Cast {get;set;} 

} 

public enum Gender { 
    Male, Female 
} 


public class Actor { 

    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Gender Gender { get; set; } 
    public DateTime Birthdate { get; set; } 
} 

И на мой взгляд, я хотел бы сделать что-то вроде этого:

@model List<Movie> 


@foreach (var movie in Model){ 

<h1>@movie.Title</h1> 

<h3>Movie Details:</h3> 

<table> 
    <tr> 
     <td>Director:</td><td>@movie.Director</td> 
    </tr> 
    <tr> 
     <td>Release Date:</td><td>@movie.ReleaseDate</td> 
    </tr> 
</table> 

<h3>Cast</h3> 

<ul> 
    @foreach(var actor in movie.Cast) 
    { 
    <li> 
     @actor.FirstName 
    </li> 
    } 
</ul> 

} 

Не уверен, если он компилирует, но дать ему попробовать: D

Смежные вопросы