2012-01-17 2 views
2

У меня есть запрос заполнения таблицы, который должен получить все объекты ссылки.Linq to Nhibernate странное поведение

У меня есть клиент:

public class Client 
{ 
    public virtual int Id { get; set; } 
    public virtual ICollection<Address> Addresses { get; protected set; } 
    public virtual Address CurrentAddress { get; set; } 
} 

Адрес

public class Address 
{ 
    public virtual int Id { get; set; } 
    public virtual string Address1 { get; set; }  
    public virtual string City { get; set; } 
    public virtual string ZipCode { get; set; } 
} 

и DB схема:

enter image description here

Я хочу, чтобы получить все адреса пользователей от Linq для NHibernate:

ClientRepository.Where(x => x.Id == clientId).SelectMany(c => c.Addresses).Where(x => x.Address1.Contains("Comp")).ToList(); 

Но я получил этот запрос:

SELECT TOP (20 /* @p0 */) Id31_, 
       Address2_31_, 
       Address3_31_, 
       City31_,     
       ZipCode31_ 
FROM (select address2_.Id         as Id31_, 
       address2_.Address1        as Address2_31_, 
       address2_.Address2        as Address3_31_, 
       address2_.City         as City31_,    
       address2_.ZipCode        as ZipCode31_, 
       ROW_NUMBER() OVER(ORDER BY address2_.Address1) as __hibernate_sort_row 
     from CLIENTS client0_ 
       inner join AddressToClient addresshis1_ 
       on client0_.Id = addresshis1_.ClientId 
       inner join ADDRESSES address2_ 
       on addresshis1_.AddressId = address2_.Id 
     where address2_.Id = 2 /* @p1 */) as query 
WHERE query.__hibernate_sort_row > 0 /* @p2 */ 
ORDER BY query.__hibernate_sort_row 

EDITED Мой хранилищу:

/// <summary> 
/// Gets the repository query. 
/// </summary> 
/// <value>The repository query.</value> 
protected override IQueryable<Client> RepositoryQuery 
{ 
    get 
    { 
    return Session.Query<Client>(); 
    } 
} 

Где фильтры запросов по id = address2_.Id не идентификатором клиента.

Зачем искать по адресу Id не клиент?

+0

Покажите нам свое 'ClientRepository'. Вероятно, это что-то не так. – NOtherDev

+0

Я добавил репозиторий клиентов. –

ответ

4

Попробуйте изменить одно из двух имен переменных «x» на что-то другое. В текущей версии версии NHibernate есть ошибка, которая может вызвать это.

Смежные вопросы