2

我有两张桌子:

CalendarEntry
  Id
  Date
  ...

Holiday
  Id
  Date
  ...

在我的CalendarEntry课堂上,我有这样的财产

public ISet<Holiday> Holidays { ... }

我想将其关联到Holiday与. 但是,我想不出如何做到这一点。DateCalendarEntry

我尝试将其映射为一对多,但一对多自动假定它应该使用CalendarEntry'Id列执行连接(大概是因为它是唯一保证唯一的属性,它必须是是一对多)。

我已经尝试将它映射为多对多,但似乎多对多需要一个单独的连接表,在这种情况下我不想要它。

我的问题是:是否可以在 NHibernate 中映射它,我应该怎么做?如果不可能,为什么?

4

3 回答 3

1

我认为您需要做的是设置查询以获取假期条目。我不确定这可以使用映射来完成。


我的原始答案中的附加信息可能不适用:您可以在 NHibernate 中建立多对多关系,而无需为连接表条目创建单独的实体类,但基础数据仍然需要存在于数据库中的某个位置。

于 2010-01-11T16:40:32.747 回答
1

您应该能够使用 property-ref 来做到这一点,我相信它在 NHibernate 2.1 中可用。我在链接文本中找到了它,这是将它添加到 NHibernate 的jira

我不确定这是否适用于日期列,如果您的日期字段包含时间数据,您肯定不走运。

您始终可以将关系排除在模型之外并通过存储库方法(即 GetHolidaysForDate)访问集合。这对我来说更有意义,因为假期不同于日历条目和特定文化。除非您使用的非美国含义等同于“假期”。

于 2010-01-11T16:55:30.860 回答
0

CalendarEntry您可以创建一个包含来自and的适当 id 的数据库视图(或派生表查询)Holiday,然后使用该视图映射多对多关系 - 这在技术上避免了连接表,同时允许 NHibernate 以它想要的方式工作.

您需要确保 NHibernate 不会尝试更新集合(可能是 和 的某种组合inverse="true"cascade="none"并避免在代码中修改它们 - 我认为您可以接受这一点,因为您根本不需要表格。

于 2010-01-12T04:28:02.530 回答