Sex, Strategy and  PlayerInTeam ?
If you want simplified.

Note: in the class Team you are referring a field named 'strategies'but the
field is not present.

On Tue, Nov 9, 2010 at 5:43 AM, Michael Delva <[email protected]> wrote:

> Here is the domain:
>
> public class Team : BaseEntity<Team>
> {
>    private readonly IesiGeneric.ISet<Match> matchesAtHome = new
> HashedSet<Match>();
>    private readonly IesiGeneric.ISet<Match> matchesOnRoad = new
> HashedSet<Match>();
>
>    private readonly IesiGeneric.ISet<TeamRoster> rosters = new
> HashedSet<TeamRoster>();
>
>    public Team()
>    {
>        rosters.Add(new TeamRoster(this, "Default", true));
>    }
>
>    public IEnumerable<TeamRoster> Rosters { get { return rosters; } }
>    public IEnumerable<Strategy> Strategies { get { return
> strategies; } }
>
>    public IEnumerable<Match> MatchesAtHome { get { return
> matchesAtHome; } }
>    public IEnumerable<Match> MatchesOnRoad { get { return
> matchesOnRoad; } }
>
>    public Sex Sex { get; set; }
>    public bool Visible { get; set; }
>    public string Name { get; set; }
>    public string Location { get; set; }
>
>    public TeamRoster DefaultRoster
>    {
>        get { return Rosters.Where(r =>
> r.IsDefault).FirstOrDefault(); }
>    }
>
>    public IEnumerable<Match> AllMatches
>    {
>        get { return MatchesAtHome.Union(MatchesOnRoad); }
>    }
> }
>
> public class Match : BaseEntity<Match>
> {
>    private Team roadTeam;
>    private Team homeTeam;
>    private Roster homeRoster;
>    private Roster roadRoster;
>
>    public Match()
>    {
>    }
>
>    public Team HomeTeam
>    {
>        get { return homeTeam; }
>        set
>        {
>            if (homeTeam == value)
>                return;
>
>            homeTeam = value;
>
>            if (value == null)
>            {
>                HomeRoster = null;
>                return;
>            }
>
>            HomeRoster = new Roster(value);
>        }
>    }
>
>    public Team RoadTeam
>    {
>        get { return roadTeam; }
>        set
>        {
>            if (roadTeam == value)
>                return;
>
>            roadTeam = value;
>
>            if (value == null)
>            {
>                RoadRoster = null;
>                return;
>            }
>
>            RoadRoster = new Roster(value);
>        }
>    }
>
>    public Roster HomeRoster
>    {
>        get { return homeRoster; }
>        private set
>        {
>            homeRoster = value;
>
>            if (homeRoster == null || homeRoster.Team.DefaultRoster ==
> null)
>                return;
>
>            homeRoster.Team.DefaultRoster.Players.ForEach(pit =>
> homeRoster.AddPlayer(pit.Player,
>
> pit.PlayerNumber,
>
> pit.Position));
>        }
>    }
>
>    public Roster RoadRoster
>    {
>        get { return roadRoster; }
>        private set
>        {
>            roadRoster = value;
>
>            if (roadRoster == null || roadRoster.Team.DefaultRoster ==
> null)
>                return;
>
>            roadRoster.Team.DefaultRoster.Players.ForEach(pit =>
> roadRoster.AddPlayer(pit.Player,
>
> pit.PlayerNumber,
>
> pit.Position));
>        }
>    }
> }
>
> public class Roster : BaseEntity<Roster>
>    {
>        private readonly Iesi.Collections.Generic.ISet<PlayerInTeam>
> players = new HashedSet<PlayerInTeam>();
>
>        protected Roster()
>        {
>
>        }
>
>        public Roster(Team team)
>            : this()
>        {
>            Team = team;
>        }
>
>        public Team Team { get; private set; }
>
>        public IEnumerable<PlayerInTeam> Players { get { return
> players; } }
>
>        public PlayerInTeam AddPlayer(Player player, int playerNumber
> = 0, Position playerPosition = null)
>        {
>            PlayerInTeam pit = new PlayerInTeam(this, player,
> playerNumber == 0 ? player.DefaultNumber : playerNumber,
> playerPosition ?? player.DefaultPosition);
>            players.Add(pit);
>
>            return pit;
>        }
>
>        public void RemovePlayer(Player player)
>        {
>            var playerInTeam = Players.First(pit => pit.Player ==
> player);
>            player.RemovePlayerFromRoster(playerInTeam);
>
>            players.Remove(playerInTeam);
>        }
>
>        public void UpdatePlayers(IEnumerable<Player> newPlayers)
>        {
>            foreach (var newPlayer in newPlayers.Where(newPlayer => !
> Players.Any(pit => pit.Player.Equals(newPlayer))))
>                AddPlayer(newPlayer);
>
>            for (int i = players.Count - 1; i >= 0; i--)
>            {
>                var player = Players.ElementAt(i).Player;
>
>                if (!newPlayers.Contains(player))
>                    RemovePlayer(player);
>            }
>        }
>
>        public void Clear()
>        {
>            foreach (var playerInTeam in Players)
>
> playerInTeam.Player.RemovePlayerFromRoster(playerInTeam);
>
>            players.Clear();
>        }
>    }
>
> public class TeamRoster : Roster
> {
>    protected TeamRoster()
>    {
>
>    }
>
>    public TeamRoster(Team team, string name, bool isDefault)
>        : base(team)
>    {
>        IsDefault = isDefault;
>        Name = name;
>    }
>
>    public bool IsDefault { get; set; }
>    public string Name { get; set; }
> }
>
> I hope this helps :)
>
>
>
> On 8 nov, 20:17, Fabio Maulo <[email protected]> wrote:
> > To know the answer, perhaps, the domain is required.
> > If you will generate the DB through NH the domain is enough if not, to
> know
> > if the mapping is correct, we need the schema too.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On Mon, Nov 8, 2010 at 1:15 PM, Michael Delva <[email protected]>
> wrote:
> > > Hello everybody,
> >
> > > I'm still low on the learning curve of NH, and I have some problems to
> > > correctly map my entities.
> >
> > > Here is what the entities I have, and their relationships:
> >
> > > A Team entity, which has multiple TeamRoster. Each TeamRoster contains
> > > a list of references to Player, and with each reference, stores the
> > > number of the player.
> > > A Match entity, which has 2 references to Team, and 2 references to
> > > Roster.
> >
> > > Here, TeamRoster inherits from Roster, and just add some specific
> > > properties it needs.
> >
> > > Here are the mappings of these entities, created with FluentNH:
> >
> > > * Team
> >
> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
> > > access="property" auto-import="true" default-cascade="none" default-
> > > lazy="true">
> > >  <class xmlns="urn:nhibernate-mapping-2.2" mutable="true"
> > > name="Emidee.CommonEntities.Team, Emidee.CommonEntities,
> > > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="Teams">
> > >    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0,
> > > Culture=neutral, PublicKeyToken=b77a5c561934e089">
> > >      <column name="Id" />
> > >      <generator class="increment" />
> > >    </id>
> > >    <set cascade="all-delete-orphan" inverse="true" name="Rosters"
> > > mutable="true">
> > >      <key>
> > >        <column name="Team_id" />
> > >      </key>
> > >      <one-to-many class="Emidee.CommonEntities.TeamRoster,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" />
> > >    </set>
> > >    <set inverse="true" name="MatchesAtHome" mutable="true">
> > >      <key>
> > >        <column name="HomeTeam_id" />
> > >      </key>
> > >      <one-to-many class="Emidee.CommonEntities.Match,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" />
> > >    </set>
> > >    <set inverse="true" name="MatchesOnRoad" mutable="true">
> > >      <key>
> > >        <column name="RoadTeam_id" />
> > >      </key>
> > >      <one-to-many class="Emidee.CommonEntities.Match,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" />
> > >    </set>
> > >  </class>
> > > </hibernate-mapping>
> >
> > > * Roster
> >
> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
> > > access="property" auto-import="true" default-cascade="none" default-
> > > lazy="true">
> > >  <class xmlns="urn:nhibernate-mapping-2.2" mutable="true"
> > > name="Emidee.CommonEntities.Roster, Emidee.CommonEntities,
> > > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
> > > table="`Roster`">
> > >    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0,
> > > Culture=neutral, PublicKeyToken=b77a5c561934e089">
> > >      <column name="Id" />
> > >      <generator class="increment" />
> > >    </id>
> > >    <set cascade="all-delete-orphan" inverse="true" name="Players"
> > > mutable="true">
> > >      <key>
> > >        <column name="Roster_id" />
> > >      </key>
> > >      <one-to-many class="Emidee.CommonEntities.PlayerInTeam,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" />
> > >    </set>
> > >    <many-to-one class="Emidee.CommonEntities.Team,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" name="Team">
> > >      <column name="Team_id" not-null="true" />
> > >    </many-to-one>
> > >    <joined-subclass name="Emidee.CommonEntities.TeamRoster,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" table="`TeamRoster`">
> > >      <key>
> > >        <column name="Roster_id" />
> > >      </key>
> > >      <property name="IsDefault" type="System.Boolean, mscorlib,
> > > Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
> > >        <column name="IsDefault" length="250" not-null="true" />
> > >      </property>
> > >      <property name="Name" type="System.String, mscorlib,
> > > Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
> > >        <column name="Name" length="250" not-null="true" />
> > >      </property>
> > >      <many-to-one class="Emidee.CommonEntities.Team,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" name="Team">
> > >        <column name="Team_id" not-null="true" />
> > >      </many-to-one>
> > >    </joined-subclass>
> > >  </class>
> > > </hibernate-mapping>
> >
> > > * Match
> >
> > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-
> > > access="property" auto-import="true" default-cascade="none" default-
> > > lazy="true">
> > >  <class xmlns="urn:nhibernate-mapping-2.2" mutable="true"
> > > name="Emidee.CommonEntities.Match, Emidee.CommonEntities,
> > > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
> > > table="Matches">
> > >    <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0,
> > > Culture=neutral, PublicKeyToken=b77a5c561934e089">
> > >      <column name="Id" />
> > >      <generator class="increment" />
> > >    </id>
> > >    <many-to-one class="Emidee.CommonEntities.Championship,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" name="Championship">
> > >      <column name="Championship_id" />
> > >    </many-to-one>
> > >    <many-to-one class="Emidee.CommonEntities.Team,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" name="HomeTeam">
> > >      <column name="HomeTeam_id" not-null="true" />
> > >    </many-to-one>
> > >    <many-to-one class="Emidee.CommonEntities.Team,
> > > Emidee.CommonEntities, Version=1.0.0.0, Culture=neutral,
> > > PublicKeyToken=null" name="RoadTeam">
> > >      <column name="RoadTeam_id" not-null="true" />
> > >    </many-to-one>
> > >    <many-to-one cascade="save-update"
> > > class="Emidee.CommonEntities.Roster, Emidee.CommonEntities,
> > > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
> > > name="HomeRoster">
> > >      <column name="HomeRoster_id" />
> > >    </many-to-one>
> > >    <many-to-one cascade="save-update"
> > > class="Emidee.CommonEntities.Roster, Emidee.CommonEntities,
> > > Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
> > > name="RoadRoster">
> > >      <column name="RoadRoster_id" />
> > >    </many-to-one>
> > >  </class>
> > > </hibernate-mapping>
> >
> > > Is my Roster mapping correct? I've tried a lot of various combinations
> > > to make this work, and I'd like to have your point of view about that.
> >
> > > And my other question concerns the relationships between Match and
> > > Roster. One Match references 2 Rosters (one for each team). Is the
> > > many-to-one relationship OK? I'm not sure about that. Should I use a
> > > one-to-one relationship?
> >
> > > Thanks in advance
> >
> > > Mike
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "nhusers" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected]<nhusers%[email protected]>
> <nhusers%[email protected]<nhusers%[email protected]>>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/nhusers?hl=en.
> >
> > --
> > Fabio Maulo
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>


-- 
Fabio Maulo

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to