![](/img/trans.png)
[英]Can ServiceStack.OrmLite “LoadSelect” not load IEnumerable references?
[英]Paging with LoadSelect fails in ServiceStack OrmLite on SQL Server
我正在嘗試在ServiceStack(4.0.50)服務中完成分頁,並且當
查詢具有多個
使用LoadSelect
聯接
時,我遇到
了
一個問題。
為了篩選結果以符合安全性要求,我的Get
方法從自定義用戶會話中提取信息並構建查詢。 像這樣:
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;
}
計數始終正常,結果的第一頁始終正常。 但是,拉出結果的后續頁面會出現以下錯誤: 如果未將EXISTS引入子查詢,則只能在選擇列表中指定一個表達式。
不幸的是,我需要應用過濾,這需要聯接。
不幸的是,我需要加載引用並希望避免選擇n + 1的情況。 我已經嘗試檢查q
對象中的SQL表達式,但是看起來沒有任何方法可以查看發送到服務器的真正最終SQL是什么。
有什么建議么?
注意:我不使用自動查詢,我只是使用QueryBase<>
和QueryResponse<>
對象來使用分頁和計數屬性。
事實證明,這是標准SqlServerDialect.Provider
的問題。 由於這是SQL 2012,因此當我在AppHost中切換到SqlServer2012Dialect.Provider
時,它可以按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.