2012-01-17 7 views
2

私はすべての参照エンティティを取得する必要がありますテーブルの塗りつぶしクエリがあります。Linq to Nhibernate strange behavior

私が持っているクライアント:

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

私はNHibernateのにLINQのすべてのユーザーのアドレスを取得したいです

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

しかし、私はこのクエリなった:EDITED

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 

をマイリポジトリ:

/// <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

+0

私はクライアントリポジトリを追加しました。 –

答えて

4

2つの「x」変数名のうちの1つを別のものに変更してみてください。現在のNHibernateのリリースバージョンにこれを引き起こすバグがあります。