2012-01-17 55 views
2

我有一個表填充查詢,它必須獲取所有引用實體。Linq以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過濾器。

爲什麼搜索出現地址ID不是客戶端?

+0

向我們展示您的ClientRepository。這可能是做錯了事。 – NOtherDev 2012-01-17 20:37:01

+0

我已添加客戶端存儲庫。 – 2012-01-18 09:22:09

回答

4

嘗試將您的兩個「x」變量名稱之一更改爲不同的名稱。目前的NHibernate發行版本中有一個錯誤可能導致這種情況。