Место может иметь одну или несколько областей, и, наоборот, каждая область имеет ровно одно место. Я использую версию 1.0.0.636 Fluent NHibernate.
Когда я добавил Fetch.Join () в VenueMap для устранения отложенной загрузки, сгенерированный SQL включает в себя соединение с таблицей Area из себя: (очевидно, упрощенно)
SELECT *
FROM Areas
LEFT OUTER JOIN Venues on Areas.VenueId = Venues.Id
LEFT OUTER JOIN Areas as Areas2 on Venues.Id = Areas2.VenueId
Это приводит к тому, что он возвращает дубликаты строк, поэтому каждое место имеет дублирующиеся области в своей коллекции. Я попытался использовать DistinctBy MoreLinq после получения всех Областей, но при этом у каждого Места остается дублирующиеся Области - он просто удаляет дублирующиеся области из основной коллекции. Это также кажется действительно грязным, потому что я возвращаю примерно в три раза больше данных, а затем выбрасываю их.
Как я упоминал выше, мой запрос состоит в том, чтобы получить все Области и загрузить все Места встречи.
Доменные объекты:
class Venue
{
int Id;
IList Areas;
}
class Area
{
int Id;
Venue Venue;
}
Отображения:
public class VenueMap : ClassMap<Venue>
{
public VenueMap()
{
Table("Venues");
HasMany(v => v.Areas)
.KeyColumn("VenueId")
.Inverse()
.Fetch.Join();
}
public class AreaMap : ClassMap<Area>
{
public AreaMap()
{
Table("Areas");
Id(a => a.Id);
References(a => a.Venue).Column("VenueId").Not.Nullable();
}
}
Есть идеи, как я могу отсортировать свои сопоставления и удалить дублирующиеся Области? Я уже оооочень много гуглял уже ...
Спасибо,
Monty