我是MVC的新手,我正在尝试解决如何连接不同的模型以在视图示例中显示
Model Teams
int TeamID
string Team_Name
Model Players
int PlayerID
string PlayerName现在我希望将这些信息存储在一个数据库中,那么我该如何将两者联系起来呢?
因此,在玩家模型中,我可以使用以下两种Team Team or int TeamID
Team_ID我可以存储在db表中,但当我提取球员列表时,必须以某种方式包括team表。或者TEAM Team,我可以通过modelItem.team.team_name查看团队名称,但不能将团队对象存储在数据库中。
我知道这在MVC方面是基本的,但我只是在努力理解它。
有任何建议或解决方案的链接吗?
发布于 2016-09-26 23:18:41
您的实体类应该类似于:
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。属性名称应该是pascal大小写的,并且应该一起运行: LikeThis,而不是likeThis或Like_This。此外,在属性名中包含类名也是一种反模式。例如,Name属性属于Team,所以它当然是团队的名称。使用Team (TeamName)作为它的前缀是没有意义的,它只会使您的代码更加冗长。例如,哪个读起来更好:team.Name还是team.TeamName
https://stackoverflow.com/questions/39705534
复制相似问题