2011-10-24 56 views
1

我想添加一個特定的SQL 1查詢將只能在SQL Server上工作。如何做到這一點:如何使用NHibernate的TABLESAMPLE?

標準:

 Session 
      .CreateCriteria<User>() 
      .Add(Expression.Sql("TABLESAMPLE (100 PERCENT)")) 
      .SetMaxResults(count) 
      .List<User>(); 

生成的SQL:

SELECT 
    TOP (6) 
     this_.user_id 
FROM users this_ 
WHERE TABLESAMPLE (100 PERCENT) 

預期SQL:

SELECT 
    TOP (6) 
     this_.user_id 
FROM users this_ 
TABLESAMPLE (100 PERCENT) 

WHERE關鍵字不應該存在。怎麼做?

10X

回答

1

爲什麼要用ICriteria抽象過的SQL,如果你將擁有普通的SQL呢?只需使用Session.CreateSqlQuery(...)並使用您的本機查詢。

使用該工具僅僅是爲了使用它(在某些情況下以某種方式濫用它),沒有任何意義。 ICriteria更適合於實體查詢,而不適用於數據庫端操作。

+0

我有很多限制,這裏沒有列出爲簡單起見。 HQL也是一個選項。 – mynkow

+0

好吧,所以我不認爲有可能將NHibernate抽象與這些特定的數據庫功能混合在一起。也許存儲過程將適合在這裏? – NOtherDev

+0

如何擴展Criteria API?有沒有擴展點? SP不是一個選項:( – mynkow