我有一个类
public class Account {
public DateTime? StartDate {get;set;}
public DateTime? EndDate {get;set;}
public bool IsActive {get;set;}
}
IsActive 属性被定义为一个公式
.Formula(" StartDate < GETDATE() and (EndDate is NULL or EndDate > GetDate())")
但是,当使用 QueryOver 查询 IsActive == true 的所有帐户时,我收到一个错误,即 NHibernate 无法执行 SQL。
NHibernate生成的SQL有
...other criterias...
and this_.StartDate < GETDATE()
and (this_.EndDate is NULL
or this_.EndDate > GetDate()) = 1
我如何正确定义公式。
公式是做这件事的正确方法还是有完全不同的方法来解决这个问题
更新:
谢谢
最佳答案
Formula
在这种情况下应该/必须返回 bool
.因此,我们可以通过这种方式重新定义公式(SQL Server 语法):
.Formula(@"
(
CASE
WHEN StartDate < GETDATE() and (EndDate is NULL or EndDate > GetDate())
THEN 1
ELSE 0
END
)
";
(不需要 括号,但是...)返回值是1 或0 表示 bool 值。所以现在这个
QueryOver
将工作:var query = session.QueryOver<Account>()
.Where(a => a.IsActive == true);
var list = query.List<Account>();
关于nhibernate - 使用 Fluent NHibernate 定义派生 bool 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13957542/