【发布时间】:2010-10-30 17:49:45
【问题描述】:
我是 NHibernate 的新手,所以我确信我只是缺少一些基本的东西。
我有一个名为 Issue 的表,它有一个 ParentId 列。 ParentId 可以引用不同的表(即 - 项目或客户等)我如何在 NHibernate 中进行该查询,以便我只能显示属于项目的问题。这是我尝试过的。
DetachedCriteria dCriteria = DetachedCriteria.For<Issue>("issue")
.SetProjection(Projections.Property("ParentId"))
.CreateAlias("Project", "project", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.EqProperty("issue.ParentId", "project.Id"))
;
var issues = Session.CreateCriteria<Issue>("issue")
.Add(Subqueries.Exists(dCriteria)).List<Issue>();
return issues;
我的映射看起来像这样。请注意,我没有对父对象的任何引用,因为我不知道它会是什么。
<class name="Issue" table="dbo.Issue" lazy="true">
<id name="Id" column="Id">
<generator class="assigned" />
</id>
<property name="ParentId" column="ParentId" />
<property name="Name" />
<property name="Description" />
如有任何指导,我将不胜感激。
也许我应该多解释一下。我有一个包含所有问题的网格,我想显示一个类型列,以便我们知道什么类型的问题(项目等)除了这个显示之外,该列没有任何其他用途,所以我不认为它对将其添加到数据库中。在 SQL 中,通过连接或使用 Exists 过滤数据很容易。 NHibernate 中必须有类似的方法,所以我不必遍历每个项目来解决所有问题。
【问题讨论】:
标签: c# nhibernate nhibernate-mapping