Свободный Nhibernate ApplyFilter в столбце Присоединиться - PullRequest
5 голосов
/ 18 марта 2011

Я пытаюсь применить фильтр (ApplyFilter) к столбцу, который является соединением (и проецируется) из другой таблицы. У меня есть следующая сущность:

public class User
{
    public virtual int Id { get; private set; }
    public virtual string EMail { get; set; }
    ...
    public virtual bool IsActive { get; set; }
    public virtual int CompanyId { get; set; }
}

С пользовательской картой:

public class UserMap : ClassMap<User>
{
    public UserMap()
    {
        Table("Users");
        Id(x => x.Id, "UserId");
        Map(x => x.EMail);
        ...

        Join("CompanyUser", r =>
        {
            r.KeyColumn("UserId");
            r.Map(x => x.IsActive);
            r.Map(x => x.CompanyId);
            r.Fetch.Join();

        });

        ApplyFilter<CompanyFilter>("this_1_.CompanyId = :companyId");
    }

Это на самом деле работает прямо сейчас, но, как вы можете видеть, я должен включить псевдоним "this_1_" для таблицы CompanyUser в фильтре ... это звучит неправильно, но если я оставлю фильтр как определяется в классе FilterDefinition Я получаю Sql с:

where this.CompanyId = ?p0

, который не отображается, так как столбец CompanyId исходит из другой проекции (CompanyUser as this_1 _)

Есть ли способ исправить это и позволить nhibernate определить правильный псевдоним для фильтра?

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 16 июля 2011

Я думаю, вы должны применить фильтр к объединению:

    Join("CompanyUser", r =>
    {
        r.KeyColumn("UserId");
        r.Map(x => x.IsActive);
        r.Map(x => x.CompanyId);
        r.Fetch.Join();

    }).ApplyFilter<CompanyFilter>("CompanyId = :companyId");
...