2009-07-20 5 views
1

J'ai des classes suivantes dans mon modèle de domaine:Cartographie avec 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; } 
} 

Comme vous pouvez le voir un joueur peut jouer plusieurs matches, et chaque match a deux joueurs. Comment mapper ces classes correctement en utilisant le mappage Fluent?

Répondre

2

Les joueurs sur le mappage de correspondance seraient les références (nombre-to-one) faisant référence à différents playerIds dans le tableau de correspondance et les matchs sur des joueurs seraient hasMany (un à plusieurs):

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

Vous avez besoin d'un nombre de many-to-many (ce cas étant un multiple à 2). Une cartographie est couramment possible

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

autrement NHibernate ne connaîtrait pas la colonne à utiliser (ou match.player1_id match.player2_id)

Questions connexes