NHibernate LINQ超时

时间:2018-02-27 04:35:01

标签: c# linq nhibernate

我需要为NHibernate LINQ查询设置超时。事件虽然我编写了代码并且代码在运行时编译但我得到了错误

"Method not found: 'System.Linq.IQueryable`1<!!0> NHibernate.Linq.LinqExtensionMethods.Timeout(System.Linq.IQueryable`1<!!0>, Int32)

正在使用的版本是

   `<package id="NHibernate" version="3.3.3.4001" targetFramework="net452" />`

代码看起来像这样

    var gpq = (from spg in session.Query<Table1>()
              join spgm in session.Query<Table2>() 
on spg.Table1Key equals spgm.Table2Key join sp in session.Query<Table3>() on spgm.Table2ID equals sp.Table3ID orderby spg.Table1ID
                                select spg).Timeout(120).Distinct();
                            var groups = gpq.ToList();

有人可以建议我做错了吗。

1 个答案:

答案 0 :(得分:0)

如果Timeout()返回新的IQueryable,您需要分配或链接它:

var gpq = (
   from spg in session.Query<Table1>()
   join spgm in session.Query<Table2>() on spg.Table1Key equals spgm.Table2Key 
   join sp in session.Query<Table3>() on spgm.Table2ID equals sp.Table3ID 
   orderby spg.Table1ID
   select spg
).Distinct();

var groups = gpq.Timeout(120).ToList();

但是,查看来源,Obsolete方法有Timeout()属性。它说使用WithOptions()方法代替:

var groups = qpq.WithOptions(options => options.SetTimeout(120)).ToList();