具有以下结构:
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
答案 0 :(得分:1)
答案 1 :(得分:0)
最后,我从Java的版本(Hibernate)中找到了这个答案: