仅查询基类

时间:2016-09-14 06:13:40

标签: c# nhibernate

具有以下结构:

  • width:500px
  • Article : IArticle
  • SuperArticle : Article

AwesomeArticle : Article不是抽象的,有些项只是文章,其他是派生类型。这是我的NHibernate配置,遵循每层次表的策略(因为子块也在主表上,并且可能包含或不包含其他表中的附加数据):

Article

问题是,当我尝试查询那些只是<class name="IArticle" table="Articles" > <id name="Id" column="IdArticle"/> <discriminator type="string" formula="(CASE WHEN IdTipoDef LIKE 'DefProd8' THEN 'SUPER' ELSE CASE WHEN IdTipoDef LIKE 'DefProd9' THEN 'AWESOME' ELSE 'ARTICLE' END END)"/> <property name="Description" column="Descrip"/> <subclass name="SuperArticle" discriminator-value="SUPER"> <join table="otherTable"> ... </join> </subclass> <subclass name="AwesomeArticle" discriminator-value="AWESOME"> <join table="otherOtherTable"> ... </join> </subclass> <subclass name="Article" discriminator-value="ARTICLE"> </subclass> </class> 的那个时,它还会返回它的子类,如果我尝试计数,我会收到一个错误:

Article

此( [TestMethod] public void EncuentraArticulosTest() { ISession session = NHibernateHelper.GetSession(); session.BeginTransaction(); Debug.Write(session.QueryOver<Article>().Where(a => a.GetType() == typeof(Article)).RowCount()); Assert.IsTrue(session.QueryOver<Article>().RowCount() > 0); session.Close(); } Assert)提供以下异常:

Debug

2 个答案:

答案 0 :(得分:1)

这是设计发生的,因为派生类是基类型。这是经典的面向对象的多态性。

如果您确实只需要返回基类实体,请查看此票证。

NHibernate: Load base class objects only

答案 1 :(得分:0)

最后,我从Java的版本(Hibernate)中找到了这个答案:

How to perform a non-polymorphic HQL query in Hibernate?