實體類應該是這個樣子:
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();
如果你需要走另一條路,然後同樣
var players = team.Players.ToList();
,你可以急切地加載的球員,以儘量減少查詢:,你可以從Team
一個實例加載的球員名單以及
var team = db.Teams.Include(m => m.Players).SingleOrDefault(m => m.Id == teamId);
對於它的價值,你的班級和財產名稱違反了慣例。注意我提供的示例代碼中的類和屬性名稱。實體類的名稱應始終爲單數:Team
,而不是Teams
。屬性名稱應該是pascal-cased並且一起運行:LikeThis,不像This或Like_This。另外,在屬性名稱中包含類名稱是一個反模式。例如,Name
財產屬於Team
,所以當然這是團隊的名稱。在前綴Team
(TeamName
)的前面有零點,它只會讓你的代碼更加冗長。例如,哪個更好:team.Name
或team.TeamName
?