2012-02-29 15 views
1

Fluent NHibernate Formulaでエンティティのテーブルエイリアスを参照または名前変更することはできますか?私は通常は "this_"を使用することができますが、残念ながらNHibernateが生成する他のエイリアスの数に基づいて一貫しているようには見えません。Fluent NHibernate ClassMap Formulaの親テーブルの別名参照?

this.Map(x => x.IsLocked).Formula("CASE WHEN (SELECT COUNT(*) FROM dbo.Child c WHERE c.InboundDate >= BeginDate AND c.InboundDate < EndDate) > 0 THEN 1 ELSE 0 END"); 

、これはによって私を取得しますが、私は同じ名前のフィールドを一致させる必要があるとき、私はトラブルに実行する(のような「ID」)

this.Map(x => x.IsLocked).Formula("CASE WHEN (SELECT COUNT(*) FROM dbo.Child c WHERE c.ID = ID) > 0 THEN 1 ELSE 0 END"); 

ここで、IDcの列であるため、 c.ID = IDは常にtrueと評価されます。ほとんどの場合、私はこれをc.ID = this_.IDに変更することができますが、私のエンティティの中には、NHibernateが別名としてthis_を使用することはありませんが、parent1_のようなものです。

答えて

2

完全に質問が分かりません。数式の問題点/エラーは何ですか?

注:NHibernateは、Formula内のすべての列名の前に、Forumulaを含むEntityのテーブルのエイリアスをエイリアスなしで付加します。

注2:ノーc.ID = IDは常にtrue

と評価されます

:parentesisで全体の式をラップする(CASE ... END)

アップデート優れています2番目のIDにはプレフィックスがなく、数式が含まれているエンティティテーブルのプレフィックスが与えられます。try log th e SQLを生成するために生成されます。

例:

Map(u => u.RolesCount).Formula("(SELECT COUNT(*) FROM roles r WHERE r.user_id = id)"); 

//results in 

SELECT 
    user0_.Id as Id0_0_, 
    (SELECT 
     COUNT(*) 
    FROM 
     roles r 
    WHERE 
     r.user_id = user0_.id) as formula0_0_ 
FROM 
    "User" user0_ 
WHERE 
    [email protected]; 
+1

私はへの質問を更新しました - うまくいけば - それは、もう少し明確にします。 NHibernateが式に与えるエイリアスについては言及していませんが、NHibernateの別名はエンティティテーブルに与えます。 –

+0

あなたはそうです。 NHibernateは 'this'を' ID'に付加します。私は結果を得ていないし、間違った木を吠えるようになった。 –

関連する問題