2011-10-24 8 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) 

EXPECTED SQL:

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

キーワードが存在するはずがないザ・を。どうやってするか?とにかく普通のSQLを持ってしようとしている場合、SQL上ICriteria抽象化を使用する理由

10倍

答えて

1

Session.CreateSqlQuery(...)を使用してネイティブクエリを使用してください。

ツールを使用するためにツールを使用するのは実際の意味がありません(この特定のケースでは何とか悪用する)。 ICriteriaはエンティティクエリに適しており、データベース側の操作には適していません。

+0

私は単純化のためにここにはリストされていない制限があります。 HQLもオプションです。 – mynkow

+0

OK、NHibernateの抽象化をそのような特定のデータベース関数と混在させることは可能ではないと私は考えています。たぶんストアドプロシージャはここに適していますか? – NOtherDev

+0

Criteria apiの拡張はどうですか?拡張ポイントはありますか? SPはオプションではありません:( – mynkow

関連する問題