Сопоставление с NHibernate? - PullRequest
1 голос
/ 20 июля 2009

В моей доменной модели есть следующие классы:

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?

Ответы [ 2 ]

2 голосов
/ 29 июля 2009

Игроками в сопоставлении матчей будут References (многие-к-одному), ссылающиеся на разные идентификаторы игроков в таблице матчей, а совпадения игроков будут 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 голос
/ 05 марта 2011

Вам нужно много ко многим (в этом случае много ко двум). Возможное свободное отображение:

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

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

...