我正在使用NHibernate进行数据库管理。 在一个类中,我使用以下公式计算属性:
(SELECT MIN(x.timestamp) FROM (SELECT MAX(r.Timestamp) AS timestamp, r.Meter_Id FROM Reading r, Meter m WHERE r.Meter_Id = m.Id AND m.Store_Id = Id GROUP BY r.Meter_Id) AS x)
生成的查询如下所示:
(SELECT MIN(x.timestamp) FROM (SELECT MAX(r.Timestamp) AS timestamp, r.Meter_Id FROM Reading r, Meter m WHERE r.Meter_Id = m.Id AND m.Store_Id = this_.Id GROUP BY r.Meter_Id) AS this_.x)
显然,AS语句中的名称被重命名为this_.x,这会导致错误。
这似乎是一个已知的错误:NHibernate JIRA #NH-2878
enyone有解决方案吗?
答案 0 :(得分:1)
我可能会弄错,但我实际上并不明白为什么你需要那个特定公式中的别名。
从更一般的意义上讲,您有几个选择:
答案 1 :(得分:1)
在Fluent NHibernate Map.Formula()方法中调用数据库函数时遇到了同样的问题。我的解决方法是重复完整的函数名称,而不是尝试使用ailas。
例如,EntityColumn2是一个已经被引用\加载到实体中的列。
SELECT My_Db_Function.Column1
FROM My_Db_Function(arg1, arg2, arg3, ...)
WHERE My_Db_Function.Column2 = EntityColumn2
结果是 My_Db_Function 引用保持原样(NHibernate没有别名),并且NHMInate正确地别名EntityColumn2。
答案 2 :(得分:0)
我不知道如何解决这个问题,但您可以尝试按如下方式编写计算:
SELECT TOP 1 MAX(r.Timestamp) AS timestamp
FROM Reading r, Meter m
WHERE r.Meter_Id = m.Id AND m.Store_Id = Id
GROUP BY r.Meter_Id
order by Max(r.timestamp) asc