Ah... even the class Player you are referring in the first mail is not
present in the domain you have sent.

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

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


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