2009-07-20 6 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; } 
} 

Как вы можете видеть, игрок может играть несколько матчей, и каждый матч состоит из двух игроков. Как правильно сопоставить эти классы с использованием Fluent mapping?

ответ

2

Игроки на отображении матча будут References (много-к-одному), ссылающегося различный playerIds в таблице соответствий и матчи по игроку будут hasMany (один-ко-многим):

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). Возможным свободно отображение

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

иначе NHibernate не будет знать, какой столбец использовать (match.player1_id или match.player2_id)

Смежные вопросы