0

私は 2 つのクラスを持っています:CatDomesticCat、それは を拡張しCatます。

Catすべての sを選択したいのですが、 one は選択しませんDomesticCat。NHibernate 基準 API を使用してそれを行う方法は?

4

2 に答える 2

2
var nonDomesticCats = session.CreateCriteria<Cat>()
                             .Add(Restrictions.Eq("class", typeof(Cat)))
                             .List<Cat>();

classクラス階層内のエンティティの具体的なタイプを表す疑似プロパティです。

暗黙的を除くすべての継承戦略で透過的に使用できます。

于 2010-05-28T12:49:59.023 に答える
0

まあそれは実装に依存します。

たとえば、判別列がある場合(たとえば、<discriminator column="CatType" type="string"/>継承DomesticCatクラスが値で判別する場合"domestic")、次のようなクエリを実行できます。

var allCatsButDomestic = nhSes.CreateQuery("from Cat c where c.CatType <> :catType")
     .SetString("catType", "domestic")
     .List<Cat>();

(この特定の例では、Cat抽象クラスはCatType列もCatType文字列プロパティにマップします)

編集および基準形式

var nonDomesticCats = session.CreateCriteria<Cat>()
                             .Add(Restrictions.Not(Restrictions.Eq("CatType", "domestic")))
                             .List<Cat>();

AnotherCatに関するあなたのコメントは、dbレベルでエンティティを区別する方法があることを示しています。

于 2010-05-28T11:46:09.563 に答える