【问题标题】:nhibernate with a restriction outside of sql具有 sql 之外的限制的休眠
【发布时间】:2015-08-13 19:01:31
【问题描述】:

是否可以在基于数据库外部计算的 nHibernate (版本 3.3) 中添加限制?例如,假设下面的 someCalculation 在我的代码中调用了其他一些方法并返回一个布尔值。为了论证,someCalculation()不能在数据库中生成。有没有办法让它工作?它目前正在抛出,我不确定是因为我离得太远还是我做错了什么。

 query.UnderlyingCriteria.Add(Restrictions.Where<MyEntity>(x => someCalculation(x.id)); 

【问题讨论】:

    标签: c# sql nhibernate


    【解决方案1】:

    答案不仅仅是与 SQL 相关的 NHibernate。简单地说,要么我们将在执行之前预先发送该计算的结果 - 要么我们将在 DB 端实现这样的功能。这两者的其他混合是不可能的。

    第一个会以这样的语句结束

    var allowedIds = someCalculation(); // someCalculation(x.id)
    query.WhereRestrictionOn(c => c.id).IsIn(allowedIds.ToArray());
    

    如果该 id 必须是计算的一部分,我们可以首先加载以某种方式过滤的 ID,进行计算,然后执行第二次选择 - 类似于上面

    var ids = session.QueryOver<MyEntity>()
        .Select(c => c.id)
        .List<int>();
    
    var allowedIds = someCalculation(ids); // someCalculation(x.id)
    

    如果仍然无效,唯一的方法是在 DB 端创建一个 Function 并调用它。有详细问答:

    Using SQL CONVERT function through nHibernate Criterion

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 1970-01-01
      • 2013-03-14
      • 2011-10-23
      • 2015-08-13
      • 2012-08-21
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多