У меня есть стол Team и у меня есть стол Location. У каждой команды может быть несколько локаций, и в каждой локации может быть несколько команд, так что это отношение многих ко многим.
Когда этот сценарий создается в базе данных, будет 3 таблицы: Team, Location и TeamLocation для хранения ссылок «многие ко многим».
Я сопоставил это в nhibernate, используя следующее ...
Team.hbm.xml
<class name="App.Data.Entities.Team,App.Data.Entities" table="`Team`" lazy="true">
<id name="Teamid" column="`TeamID`" type="Guid">
<generator class="assigned" />
</id>
<property type="string" not-null="true" length="250" name="TeamName" column="`TeamName`" />
<bag name="TeamLocations" inverse="false" table="`TeamLocations`" lazy="true" cascade="all">
<key column="`TeamID`" />
<many-to-many class="App.Data.Entities.Location,App.Data.Entities">
<column name="`LocationID`" />
</many-to-many>
</bag>
</class>
и Location.hbm.xml
<class name="App.Data.Entities.Location,App.Data.Entities" table="`Location`" lazy="true">
<id name="Locationid" column="`LocationID`" type="int">
<generator class="native" />
</id>
<property type="string" not-null="true" length="250" name="LocationName" column="`LocationName`" />
<property type="string" length="1000" name="Address" column="`Address`" />
<bag name="Teams" inverse="false" table="`TeamLocations`" lazy="true" cascade="all">
<key column="`LocationID`" />
<many-to-many class="App.Data.Entities.Team,App.Data.Entities">
<column name="`TeamID`" />
</many-to-many>
</bag>
</class>
Теперь я пытаюсь получить все команды, которые базируются в определенном месте, используя API критериев, что я не могу ..
Эквивалент sql ...
SELECT Team.TeamName, Location.LocationName
FROM Team INNER JOIN
TeamLocations ON Team.TeamID = TeamLocations.TeamID INNER JOIN
Location ON TeamLocations.LocationID = Location.LocationID
WHERE (TeamLocations.LocationID = 2)
и в коде asp.net
ICriteria criteria = _session.CreateCriteria(typeof(Team)).SetFirstResult(startRowIndex).SetMaxResults(maximumRows);
if (deptID > 0)
{
Department dept = new Department(deptID);
criteria.Add(Expression.Eq(Team.PropertyNames.Department, dept)); //for department, which works fine.
}
if (locationIDs.Count > 0)
{
List<Location> locations = new List<Location>();
foreach (int locationID in locationIDs)
{
Location loc = new Location(locationID);
locations.Add(loc);
}
criteria.CreateCriteria("TeamLocations").Add(Expression.Eq(""TeamLocations"", locations));
}
return criteria.List<Team>();
Это выбрасывает и ошибка ..
could not resolve property: TeamLocations of: App.Data.Entities.Location
что я не могу понять, чтобы понять: (
Поправь меня ..
Спасибо!