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.
