Фильтры NHibernate на левых внешних соединениях - PullRequest
0 голосов
/ 14 октября 2011

У меня проблема с фильтром NHibernate.Он прекрасно работает до тех пор, пока я не выполню левое внешнее соединение с объектом.

Например, Deal ссылается на PurchaseItem, но для PurchaseItem применен фильтр CompanyId.

Если я хочу запросить, сделайте с левойПри присоединении к PurchaseItem фильтр CompanyId применяется в предложении WHERE, поэтому ничего не возвращается.

Есть ли способ применить фильтр при объединении, а не в предложении where?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2014

Я ищу эту точную проблему с необязательными полями, необнуляемыми

Обратите внимание, что ваше OR не будет использовать индексы, поэтому оно может быть медленнее.

ОБНОВЛЕНИЕ: Мне кажется, я нашел исправление:

                // register filters
                var filterDef = new FilterDefinition(
                    "f_CurrentTenant",
                    "TenantId = :f_tenantId",
                    new Dictionary<string, IType> { { "f_tenantId", NHibernateUtil.Guid } },
                    **false**);
                config.AddFilterDefinition(filterDef);

Когда вы создаете фильтр, вы можете установить последний параметр с именем "useManyToOne" = false.Это скажет NH, чтобы он не использовал фильтр в соединениях.

До сих пор кажется, что это сработало: D

0 голосов
/ 14 октября 2011

Исправлено с помощью этого условия фильтра: «CompanyId is NULL или CompanyId =: companyId»

Это нормально, потому что CompanyId не равен NULL в SQLServer, поэтому мы должны получить NULL, только если мы выполняем внешнийприсоединиться.

...