2
我使用NHibernate的3.3.3.4000和SQL Server CE 4.0.8876.1,我不能讓它與分頁(跳過和採取)的工作。我看到SQL CE對它的支持有矛盾的地方。NHibernate的Sql Server精簡版和跳過/採取
Nhibernate的SQL CE驅動程序是否支持跳過和取出?生成的SQL不包含任何skip/take語法。但我看到這樣的博客語法:
SELECT * FROM Orders
ORDER BY OrderID
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY;
當我嘗試在Visual Studio服務器資源管理器中,它不喜歡那樣。我的程序顯然是從數據庫中獲取所有內容,然後在本地應用分頁。顯然這給了非常糟糕的表現。當我試圖使它成爲未來的查詢時,我得到了一個錯誤,所以我停止了這樣做。
僅供參考,我的功能NHibernate配置
var cfg = Fluently.Configure()
.Database(MsSqlCeConfiguration.Standard
.ConnectionString(c => c.FromConnectionStringWithKey("SampleDatabase"))
.AdoNetBatchSize(500)
.FormatSql())
.Mappings(mappings => mappings.FluentMappings.AddFromAssemblyOf<PositionMapping>())
.Cache(c => c.ProviderClass<SysCacheProvider>())
.BuildConfiguration();
和我的查詢是
var baseQuery = session.QueryOver<Position>();
var countQuery = baseQuery.ToRowCountQuery().FutureValue<int>();
items = baseQuery
.Left.JoinAlias(p => p.PublicText,() => publicTextAlias)
.Left.JoinAlias(p => p.RegisteredText,() => registeredTextAlias)
.Fetch(p => p.Term).Eager
.Fetch(p => p.Tags).Eager
.OrderBy(p => p.OpenDate).Desc
.CacheMode(NHibernate.CacheMode.Ignore)
.Skip(skip).Take(BatchSize)
//.Future(); // Causes error
.List<Position>();
這並添加OFFSET X行FETCH NEXT y行只對我的查詢。但是,我的查詢仍然需要很長時間才能執行,所以還有其他事情正在進行。 –