使用LoadSelect进行分页在SQL Server上的ServiceStack OrmLite中失败

时间:2015-12-19 18:57:47

标签: c# sql-server servicestack ormlite-servicestack

我试图在我的ServiceStack(4.0.50)服务中完成分页,并且当使用{{1} 查询有多个联接时,我遇到了问题}。

为了过滤安全要求的结果,我的LoadSelect方法从自定义用户会话中提取信息并构建查询。像这样:

Get

计数始终正常,结果的第一页始终有效。但是,拉取后续结果页面会出现以下错误:当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。

不幸的是,我需要应用过滤,这需要连接。不幸的是我需要加载引用并希望避免选择n + 1情况。我已经尝试检查public QueryResponse<Foo> Get(Foos request) { var session = SessionAs<CustomUserSession>(); var q = Db.From<Foo>().LeftJoin<Foo, User>((s, u) => s.UserId == u.Id); // Also tried this with no success //q.Skip(request.Skip); //q.Take(request.Take); q.Limit(request.Skip, request.Take); // I do filtering based on the request object for searching if (request.Price.HasValue) { q.And(s => s.Price == request.Price); } // ... and so on ... // Then I do filtering based on roles if (session.HasRole("OrgAdmin")) { // Do some filtering for their organization } else if (session.HasRole("SiteManager")) { // More filtering here } // Ordering also... if (request.OrderBy.IsNullOrEmpty()) { q.OrderByFieldsDescending(request.OrderByDesc); } else { q.OrderByFields(request.OrderBy); } var response = new QueryResponse<Foo> { // This works fine Total = (int)Db.Count(q), // === Error here === Results = Db.LoadSelect(q) }; return response; } 对象中的SQL表达式,但它看起来没有任何方式可以看到发送到的最终SQL是什么服务器。

有什么建议吗?

注意:我没有使用AutoQuery,我只是挪用了qQueryBase<>个对象来使用分页和计数属性。

1 个答案:

答案 0 :(得分:2)

事实证明这是标准SqlServerDialect.Provider的问题。由于这是SQL 2012,当我在AppHost中切换到SqlServer2012Dialect.Provider时,它按预期工作。