Свободное отображение Nhibernate Multiple Join - PullRequest
0 голосов
/ 10 января 2012

Я в некоторой степени новичок Nhibernate, и я занимался исследованиями, но не могу понять, как добиться того, чего я хочу, с помощью картографирования Nhibernate.

У меня есть следующие таблицы для моих объектов

  • Домены
  • Компания
  • Дилеры

Домены могут иметь много компаний, а компании могут принадлежать многим доменам. У компаний есть много Дилеров, но Дилеры принадлежат только одной Компании. Я бы хотел, чтобы мои домены отображали список всех принадлежащих ему дилеров через компании.

У меня есть таблица соединений, которая называется CompanyDomains (со столбцами CompanyID и DomainID), которая поддерживает отношения «многие ко многим» между компаниями и доменами. Эта таблица в настоящее время НЕ отображается в моей настройке Nhibernate ... Я просто присоединяюсь к ней с HasManyToMany в моей карте домена. В таблице Dealers есть столбец с CompanyID.

Нужные результаты легко достигаются с помощью SQL-запроса:

SELECT * FROM Dealers
JOIN Companies on Companies.ID = Dealers.CompanyID
JOIN CompanyDomains on Companies.ID = CompanyDomains.CompanyID
WHERE DomainID = 1

Это дает мне всех Дилеров, назначенных на Домен.

У меня вопрос: для этого мне нужен список дилеров в моем домене. Как мне сопоставить это с Nhibernate?

Если я пропустил это решение в другом месте, пожалуйста, укажите мне правильное направление, в противном случае я буду признателен за любую помощь, которую вы можете предоставить.

Спасибо! Erick

1 Ответ

0 голосов
/ 10 января 2012

Возможное решение - сопоставить коллекцию Dealers для компании с HasMany и добавить свойство удобства для Domain:

public class Domain
{
    ...
    public virtual IList<Company> Companies { get; private set; }
    public IList<Dealer> Dealers 
    { 
        get { return Companies.SelectMany(x => x.Dealers).Distinct(); }
    }
}

public class Company
{
    ...
    public virtual IList<Domain> Domains { get; private set; }
    public virtual IList<Dealer> Dealers { get; private set; } 
}

public class Dealer
{
    ...
    public virtual Company Company { get; private set; }
}

Поскольку между Dealer и Domain нет непосредственной связи, я не думаю, что вы можете отобразить это напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...