Ah... even Position

If you don't want send all your domain you can take the interesting part and
simplified it for the case you are interested.

On Tue, Nov 9, 2010 at 9:42 AM, Fabio Maulo <[email protected]> wrote:

> 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
>
>


-- 
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