2012-04-19 18 views
2

多対多にリンクされた2つのエンティティがあります。 (製品&ユーザー)私は、ユーザーによる製品を制限したい :私はuser_idだけを使用し、「どこ」でQueryOver SQLを1つだけ持つ多対多

SELECT this_.Id as y0_ 
FROM [Product] this_ 
     inner join UserToProduct users5_ 
     on this_.Id = users5_.Product_id 
     inner join [User] useralias3_ 
     on users5_.User_id = useralias3_.Id 
.... 

と私が参加し二必要はありません。

User userAlias = null; 
query.JoinAlias(product => product.Users,() => userAlias) 
    .Where(() => userAlias.Id == currentUser.Id); 

これは、SQLコードを生成します。

単一のSQL結合で(QueryOverによる)クエリをどのように書くことができますか?

+0

私が参加し、テーブルを介さずにQueryOverでこれを実現する方法はないと思う。私はUsersRoles

Role roleAlias = null; var roles = _session.QueryOver<UsersRole>().JoinAlias(x => x.Role,() => roleAlias, JoinType.LeftOuterJoin).Where( x => x.User.UserId == userId).List(); 

と同様の設定には、以下を生成しています。 –

+0

あなたが正しいかもしれない、私は方法を見つけていない。 – Anton

答えて

1

これが役立ちますか?

SELECT this_.UsersRolesId   as UsersRol1_32_1_, 
     this_.UserId    as UserId32_1_, 
     this_.RoleId    as RoleId32_1_, 
     rolealias1_.RoleId   as RoleId27_0_, 
     rolealias1_.RoleName  as RoleName27_0_, 
     rolealias1_.Active   as Active27_0_, 
     rolealias1_.DateCreated as DateCrea4_27_0_, 
     rolealias1_.LastUpdated as LastUpda5_27_0_, 
     rolealias1_.RoleSettingsId as RoleSett6_27_0_ 
FROM UsersRoles this_ 
     left outer join Roles rolealias1_ 
     on this_.RoleId = rolealias1_.RoleId 
WHERE this_.UserId = 'a7eec4eb-21cc-4185-8847-a035010e779f' /* @p0 */ 
+0

私のポストを修正するためのTY .. Andrew :) – CrazyCoderz

+0

明確にするために、OPは参加エンティティを作成する必要がありますか? – Vadim

+0

はい、いいラベルです。エイリアスよりも優れています:) – CrazyCoderz

関連する問題