【发布时间】:2010-06-09 23:08:55
【问题描述】:
在我的应用程序中,我有一个 Category 域对象。 Category 有一个属性 Parent(类型为 category)。
所以在我的 NHibernate 映射中,我有:
<many-to-one name="Parent" column="ParentID"/>
在我切换到 NHibernate 之前,我的域模型上有 ParentId 属性(映射到相应的数据库列)。
这使得查询所有顶级类别(ParentID = 0)变得容易:
where(c => c.ParentId == 0)
但是,我已经从我的域模型中删除了 ParentId 属性(因为 NHibernate),所以我现在必须执行相同的查询(使用 NHibernate.Linq),如下所示:
public IList<Category> GetCategories(int parentId) {
if (parentId == 0)
return _catalogRepository.Categories.Where(x => x.Parent == null).ToList();
else
return _catalogRepository.Categories.Where(x => x.Parent.Id == parentId).ToList();
}
我看到的真正影响是生成的 SQL。 NHibernate 生成左外连接,而不是简单的“从 parentid = 0 的类别中选择 x,y,z”:
SELECT this_.CategoryId as CategoryId4_1_,
this_.ParentID as ParentID4_1_,
this_.Name as Name4_1_,
this_.Slug as Slug4_1_,
parent1_.CategoryId as CategoryId4_0_,
parent1_.ParentID as ParentID4_0_,
parent1_.Name as Name4_0_,
parent1_.Slug as Slug4_0_
FROM 分类 this_ 左外连接类别 parent1_ 在 this_.ParentID = parent1_.CategoryId WHERE this_.ParentID 为空
这似乎并不比我以前的效率低多少。
有没有更好的方法来查询这些自引用连接,因为出于这个原因,很容易将 ParentID 放回我的域模型中。
谢谢
【问题讨论】:
标签: nhibernate