2009-06-17 61 views
0

这种情况下,我在我的数据库表2:你将如何处理与NHibernate

  • 类别
  • BlogEntry

每个BlogEntry具有与之关联1角或多个Category秒。

如果我想通过它的ID得到一个BlogEntry,我也想得到它的Category信息。

也许这个例子没有说明一个恰当的场景,但是说我想加载Category ID和Name而不是类别数据库中的所有其他列。

nHibernate会加载每个实体的所有列/属性吗?

回答

0

这取决于你如何映射它。显然,位代码检测可以只允许检索部分表,但很少需要。

也许你为什么只想类别的ID的explainantion ...

如果定义休眠映射和而不必类映射到一个类别对象的实体只是把它作为一个整数。这是我如何处理我的映射,当我不关心能够用我原来的查询获取附件。

+0

为什么?就像我说的,为了避免加载不需要显示的列。 – Blankman 2009-06-17 16:24:42

0

你会想看看投影。实际上,我们使用AliasToBean转换器来让NHibernate将我们的投影直接转换为屏幕特定的DTO。

1

我会通过将其映射为BlogEntry和Category之间的一对多关联来处理此问题,以便BlogEntry拥有一个Category类别的集合。我会设置它以便类别集合被延迟加载。我不介意加载更多的列,因为我正在处理业务对象并通过主键或外键进行选择。 NHibernate的工作是担心这一点,尽管我会在开发过程中使用SQL Profiler或NHProf来检查它。

NHibernate将通过使用BlogEntry中的外键选择类别记录来加载集合。在几乎所有情况下,只有返回将显示的字段才能获得性能提升。仅根据显示要求检索仅填充所需属性的业务对象并不是一个好的面向对象的实践。