2009-07-20 25 views
1

Ich habe folgende Klassen in meinem Domain-Modell:Mapping mit 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; } 
} 

Wie Sie ein Spieler mehr Spiele anschauen können spielen können, und jedes Spiel hat zwei Spieler. Wie kann ich diese Klassen korrekt mithilfe von Fluent-Mapping zuordnen?

Antwort

2

Die Spieler auf dem Spiel Mapping wären Referenzen (many-to-one) verschiedene playerIds in dem Match-Table und die Spiele auf Spieler hasMany wären Referenzierung (one-to-many):

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

Sie benötigen ein Viele-zu-Viele (dieser Fall ist ein Viel-zu-2). Eine mögliche fließend Mapping ist

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

sonst nhibernate würde nicht wissen, welche Spalte (match.player1_id oder match.player2_id) zu verwenden