我有两个类:Cat
和DomesticCat
,扩展Cat
。
我想选择所有Cat
s,但没有一个DomesticCat
。如何使用 NHibernate 标准 API 做到这一点?
我有两个类:Cat
和DomesticCat
,扩展Cat
。
我想选择所有Cat
s,但没有一个DomesticCat
。如何使用 NHibernate 标准 API 做到这一点?
var nonDomesticCats = session.CreateCriteria<Cat>()
.Add(Restrictions.Eq("class", typeof(Cat)))
.List<Cat>();
class
是一个伪属性,表示类层次结构中实体的具体类型。
它可以透明地与除隐式之外的任何继承策略一起使用。
好吧,这取决于实施。
例如,如果您有一个鉴别器列(假设继承类使用 value 进行鉴别<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 的评论再次暗示在数据库级别存在某种区分实体的方法。