2016-09-26 4 views
0

私はMVCに新たなんだと私はビューに表示する別のモデルを接続する方法をうまくしようとしている例モデルにおけるMVC 5つのオブジェクトとDBストレージ

Model Teams 
int TeamID 
string Team_Name 

Model Players 
int PlayerID 
string PlayerName 

今、私はこの情報をAに格納したいですデータベースはどうやって2つをリンクするのですか?

だから私はTeam Team or int TeamID

Team_IDのいずれかを使用することができますプレイヤーのモデルに私はdbテーブルに格納が、その後、私は選手のリストを引っ張ったときに何とかチームのテーブルを含めることができます。またはTEAM Team私はmodelItem.team.team_nameによってチーム名を見ることができますが、データベースにTEAMオブジェクトを格納することはできません。

私はこれがMVCの面では基本的だと知っていますが、私はそれを私の頭の中に入れるのに苦労しています。

提案や解決策へのリンクはありますか? Playerのインスタンスと、あなたは、単に行うことができ、

それと
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.Team.Name 

チームの名前を取得するには

答えて

1

あなたのエンティティクラスは次のようになります。あなたが他の道を行く必要がある場合は、その後、

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

:あなたはあなたを介して反復している選手のコレクションを持っている場合は、N + 1つのクエリで終わるしないように、あなたは熱心に、Team最初にロードする必要があります、あなたにもTeamのインスタンスから選手のリストを読み込むことができます。

var players = team.Players.ToList(); 

同様に、あなたが熱心にクエリを最小限に抑えるために選手をロードすることができます。

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

それが価値あるものであれば、クラスとプロパティの名前は規約に反します。私が提供したサンプルコードのクラス名とプロパティ名に注目してください。エンティティクラスの名前は、常にであり、Teamsではなく、単数型である必要があります。プロパティ名はパスカルで囲んで一緒に実行する必要があります:LikeThis、LikeThisまたはLike_This。また、プロパティ名にクラス名を含める反パターンです。 Nameプロパティは、たとえばTeamに属しています。もちろん、チームの名前です。接頭辞はTeamTeamName)でゼロになり、コードがより冗長になります。たとえば、それはより良い読む:team.Nameまたはteam.TeamName

関連する問題