NHibernate 3CR1: преобразование в Sql, создает проблему синтаксиса sql из ненужных скобок - PullRequest
1 голос
/ 25 ноября 2010

Моя схема базы данных описана ниже:

Форма <-> Журнал

<--- >> Seller1

<--- >> Seller2

<--- >> Seller3

У меня есть основная сущность (Форма), отношения один к одному с другим объектом (Журнал) И отношения один-ко-многим с детьми (Продавцы).

Я хочу вытащить все Формы, которые один из их Продавцов отвечает определенным условиям.

К сожалению, у меня возникли некоторые проблемы:

Если я запускаю следующую процедуру:

        [Test]
    public void Can_Get_Forms_Where_CorporationNumber_Is_510778087_Metohd0()
    {
        var CorporationNumber = "513514950";

        var list0 = formRepository
                                .Where(x => x.Sellers.Any(y => y.CorporationNumber == CorporationNumber))
                                .Fetch(x=> x.Sellers)
                                .Fetch(x => x.Log)
                                .Take(10).ToList();

        CollectionAssert.IsNotEmpty(list0);
    }

Тогда я получу ошибку синтаксиса sql

Incorrect syntax near ','

Используя NHProf, я взял запрос и нашел проблему. Я сократил свой запрос до количества запросов, чтобы сосредоточиться на проблеме:

select
 TOP (
    10 /* @p0 */)
 cast(
    count(
        *)
     as INT)
 as col_0_0_ 
from BillOfSaleForm form0_ 
where exists (
    select
         (
            sellers1_.FormID,
             sellers1_.tdNum)

from BillOfSaleSeller sellers1_ 
where form0_.FormID=sellers1_.FormID and
     (
        (
            sellers1_.MisparTagid is null)
         and
             (
                '513514950' /* @p1 */ is null)
             or
                 sellers1_.MisparTagid='513514950' /* @p1 */)
            )

Мы замечаем, что раздел

    select
     (
        sellers1_.FormID,
         sellers1_.tdNum)

Имеет дополнительные скобки !.

Конечно, если убрать выполненный запрос в скобках.

...