2010-12-05 5 views
0

nHibernateチュートリアルの夏を通して作業することは、クエリに関するセクションにあります。そのシリーズが作られてから変更があったようだ。だから私は、NHB 3.0のオンラインドキュメントに行ってきましたが、コードのような:nHibernate 3.0のクエリ

IList cats = session.CreateCriteria(typeof(Cat)) 
      .Add(Expression.Like("Name", "Fritz%")) 
      .Add(Expression.Between("Weight", minWeight, maxWeight)) 
      .List(); 

がエラーを生成します

コード「名 『表現』を現在のコンテキスト内に存在しない」のように:

return session.CreateCriteria(typeof(DataTransfer.Customer)) 
      .Add(new NHibernate.Criterion.LikeExpression("Firstname", firstname)) 
      .Add(new NHibernate.Criterion.LikeExpression("Lastname", lastname)) 
      .List<Customer>(); 

動作しますが、GtExpressionのようないくつかのクエリメソッドが欠落しているようです。 オンラインドキュメントが最新のものである場合は、なぜ式を使用できないのですか? オンラインドキュメントが最新でない場合は、どこでCriterionインターフェイスの説明を入手できますか? ありがとう

答えて

3

に適しています。

とにかく、Expressionクラスは推奨されていません。代わりにRestrictionsを使用してください。

+0

はい、私はusingステートメントを紛失していました。そして、 "Restrictions"に重点を置くのは、ドキュメントが私に混乱を招く理由です。 –

+0

あなたの問題を解決した場合は、回答を受け入れたものとしてマークしてください。 –

0

奇妙なことです。私はまだExpression。*静的メソッドを使用していますが、これらはまだ動作しています。あなたはNH3.0の最新バージョンを使用していますか?私はAlpha 2バージョンを使用します。

あなたはそれを緊急に動作させるために必要がある場合は、のは、QueryOver <>機能を試してみましょう:

return session.QueryOver<DataTransfer.Customer>() 
    .WhereRestrictionOn(u => u.Name).IsLike("Fritz%") 
    .AndRestrictionOn(u => u.Weight).IsBetween(minWeight).And(maxWeight) 
    .List(); 

それはあなたがusing NHibernate.Criterion;を追加するのを忘れ単純なクエリ