相关疑难解决方法(0)

Fluent NHibernate不会创建IN WHERE子句的一部分

我有流畅的NHibernate Linq查询,我根据运行时数组检查值.一个基本的例子是:

var array = [1,2,3,4,5,6];
using (var session = SessionProvider.SessionFactory.OpenSession())
{
  return session.Query<MyObject>().Where(x => array.Contains(x.CompareVal)).ToList();
}
Run Code Online (Sandbox Code Playgroud)

我希望生成的SQL语句看起来像这样:

SELECT CompareVal, Column1, Column2
FROM MyObject
WHERE CompareVal IN (1,2,3,4,5,6)
Run Code Online (Sandbox Code Playgroud)

但是,我发现的是生成的SQL语句只是发出WHERE子句(通过在Profiler中观察证明)并选择整个表,然后在获得所有数据后似乎在内存中运行过滤器.

需要注意的事项 - 我有一个Generic Repository类,所有这些调用都是通过漏洞进行的.Query方法如下:

public IList<T> Query(Func<T, bool> criteria)
{
  using (var session = SessionProvider.SessionFactory.OpenSession())
  {
    return session.Query<T>().Where(criteria).ToList();
  }
}
Run Code Online (Sandbox Code Playgroud)

显然,在具有大量数据的表中,这种情况(缺少where子句)是不可接受的.我该怎么做才能强制NHibernate使用WHERE子句正确生成查询并仍保留存储库的通用模式?

c# sql nhibernate fluent

6
推荐指数
1
解决办法
1968
查看次数

标签 统计

c# ×1

fluent ×1

nhibernate ×1

sql ×1