首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型和数据库存储中的MVC 5对象

模型和数据库存储中的MVC 5对象
EN

Stack Overflow用户
提问于 2016-09-26 22:29:47
回答 1查看 45关注 0票数 0

我是MVC的新手,我正在尝试解决如何连接不同的模型以在视图示例中显示

代码语言:javascript
复制
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方面是基本的,但我只是在努力理解它。

有任何建议或解决方案的链接吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 23:18:41

您的实体类应该类似于:

代码语言:javascript
复制
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的一个实例,您就可以简单地执行以下操作:

代码语言:javascript
复制
 player.Team.Name

来得到球队的名字。如果您有一个正在遍历的播放器集合,那么您应该急切地首先加载Team,这样您就不会遇到N+1查询:

代码语言:javascript
复制
var players = db.Players.Include(m => m.Team).ToList();

如果您需要采用另一种方式,那么您也可以从Team实例中加载球员列表:

代码语言:javascript
复制
var players = team.Players.ToList();

同样,您也可以迫不及待地加载播放器以最小化查询:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39705534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档