2016-09-26 5 views
0

Я новичок в MVC, и я пытаюсь выяснить, как подключать различные модели для отображения в представлении примераMVC 5 объектов в модели и БД для хранения

Model Teams 
int TeamID 
string Team_Name 

Model Players 
int PlayerID 
string PlayerName 

Теперь я хочу эту информацию, хранящуюся в базы данных, так как я могу связать их?

Таким образом, в модели Игроки я могу использовать либо Team Team or int TeamID

Team_ID можно хранить в таблице БД, но затем каким-то образом включить таблицу команды, когда я тяну список игроков. или TEAM Team, после чего я могу просмотреть название команды по типу model.tem.team_name, но не могу сохранить объект TEAM в базе данных.

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

Любые предложения или ссылки на решения?

ответ

1

классов сущностей должно выглядеть примерно так:

public class Team 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public virtual ICollection<Player> Players { get; set; } 
} 

public class Player 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Name { get; set; } 

    [ForeignKey("Team")] 
    public int TeamId { get; set; } 
    public virtual Team Team { get; set; } 
} 

С, что, с экземпляром Player, вы можете просто сделать:

player.Team.Name 

Чтобы получить имя команды. Если у вас есть коллекция игроков вы перебор, вы должны охотно загрузить Team первым, так что вы не до конца с N + 1 запросами:

var players = db.Players.Include(m => m.Team).ToList(); 

Если вам нужно пойти в другой стороне, то вы можете загрузить список игроков из экземпляра Team, а также:

var players = team.Players.ToList(); 

Кроме того, вы можете загрузить с готовностью игроков, чтобы свести к минимуму запросы:

var team = db.Teams.Include(m => m.Players).SingleOrDefault(m => m.Id == teamId); 

Для чего это стоит, ваши имена классов и свойств бросают вызов соглашениям. Обратите внимание на имена классов и свойств в примере кода, который я предоставил. Имя класса сущности всегда должно быть сингулярным: Team, а не Teams. Имена свойств должны быть паскальны и работать вместе: LikeThis, а не какЭто или Like_This. Кроме того, это антипаттерн, чтобы включить имя класса в имя свойства. Например, Name принадлежит Team, так что, конечно, это название команды. Существует нулевая точка в префиксах с Team (TeamName), и это делает ваш код более подробным. Например, что читается лучше: team.Name или team.TeamName?