2012-02-29 44 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"); 

這裏,因爲ID是列在cc.ID = ID將始終評估爲true。在大多數情況下,我可以將其更改爲c.ID = this_.ID,但在我的一些實體中,NHibernate不會使用this_作爲別名,但類似parent1_

回答

2

我完全不明白這個問題。公式提出的問題/錯誤是什麼?

注意:NHibernate將在公式中的所有列名前面加上沒有別名的公式,而別名包含的是包含論壇的實體的表的別名。

注2:最好是整個包住公式中parentesis (CASE ... END)

更新:

c.ID = ID將始終爲true

沒有它不應該是因爲第二個ID沒有前綴,並且會給出該公式所包含的entitytable的前綴。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給別名提供了實體表。 – 2012-03-02 14:31:44

+0

你說得對。 NHibernate將'this_'附加到'ID'。我沒有得到結果,並咆哮了錯誤的樹。 – 2012-03-02 15:08:13