是否可以在Fluent NHibernate公式中引用或重命名实体的表别名?我通常使用“this_”但遗憾的是,基于NHibernate生成的其他别名的数量,这似乎并不一致。
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
是c
中的列,c.ID = ID
将始终评估为true。在大多数情况下,我可以将其更改为c.ID = this_.ID
,但在我的某些实体中,NHibernate不会将this_
用作别名,而是使用parent1_
。
答案 0 :(得分:2)
我完全不理解这个问题。提出的公式有什么问题/错误?
注意:NHibernate将在公式中添加所有列名,而不包含别名,该别名包含包含Forumula的实体表的别名。
注意2:最好将整个公式包装在parentesis (CASE ... END)
更新
c.ID = ID将始终评估为真
不,不应该因为第二个ID没有前缀而且会给出包含公式的实体表的前缀。请尝试记录生成的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
user0_.Id=@p0;