2009-07-20 11 views
1

は、私は私のドメインモデルに以下のクラスがあります。NHibernateによるマッピング?

public class Player 
{ 
    public virtual string ID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual List<Match> Matches { get; set; } 
} 
public class Match 
{ 
    public virtual int ID { get; set; } 
    public virtual Player Player1 { get; set; } 
    public virtual Player Player2 { get; set; } 
} 

あなたはプレイヤーが複数の一致を再生することができます見ることができ、すべての試合が2人の選手を持っていたよう。 Fluentマッピングを使用してこれらのクラスを正しくマッピングするにはどうすればよいですか?試合マッピングの

答えて

2

選手が(多対1)参照マッチテーブルに異なるplayerIdsを参照するだろうし、プレーヤーの試合は、hasManyの(1対多)のようになります。

public sealed class PlayerMap : ClassMap<Player> 
{ 
    public PlayerMap() 
    { 
     Id(x => x.ID).GeneratedBy.Native(); 
     Map(x => x.Name); 
     HasMany(x => x.Matches).Cascade.SaveUpdate(); 
    } 
} 

public sealed class MatchMap : ClassMap<Match> 
{ 
    public MatchMap() 
    { 
     Id(x => x.ID).GeneratedBy.Native(); 
     References(x => x.Player1, "player1_id").NotFound.Ignore().Cascade.None(); 
     References(x => x.Player2, "player2_id").NotFound.Ignore().Cascade.None(); 
    } 
} 
1

多対多(この場合は多対2)が必要です。可能な流暢マッピングは、そうでない場合は、NHibernateは(match.player1_id又はmatch.player2_id)を使用するカラム知っているだろう

public PlayerMap() 
{ 
    [...] 
    HasManyToMany(x => x.Matches).Cascade.AllDeleteOrphan(); 
} 

あります

関連する問題