nhibernate - 使用 Fluent NHibernate 定义派生 bool 属性

标签 nhibernate fluent-nhibernate fluent-nhibernate-mapping

我有一个类

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/

    相关文章:

    nhibernate - 如何使用 NHibernate 和 Spring 为死锁配置 RetryAdvice 和 ExceptionTranslation

    .net - Linq to SQL 仍然是开发应用程序的可行选择吗?

    c# - 流利的 NHibernate : How to map an entire class as ReadOnly?

    c# - Nhibernate如何在运行时获取类映射信息?

    c# - 流利的 nHibernate 加入

    fluent-nhibernate - FluentNHibernate : Getting Column & Table Names After Mapping Conventions Are Applied

    C# 单元测试中未捕获的异常

    fluent-nhibernate - 流利的 NHibernate AutoMap CultureInfo

    c# - 流畅的 NHibernate 映射 : one-to-one (or none)

    WCF + NHibernate + ISession =?