我有两张桌子:
CalendarEntry
Id
Date
...
Holiday
Id
Date
...
在我的CalendarEntry
课程中,我有一个像这样的属性
public ISet<Holiday> Holidays { ... }
我希望将其与Holiday
上与Date
相同的CalendarEntry
个实例关联起来。但是,我无法想出如何做到这一点。
我已尝试将其映射为一对多,但一对多会自动假设它应使用CalendarEntry
的{{1}}列执行连接(可能因为它是唯一的保证是唯一的财产,必须是一对多的财产。
我尝试将其映射为多对多,但似乎多对多需要一个单独的连接表,在这种情况下我不想要。
我的问题是:是否可以在NHibernate中映射它,我应该怎么做?如果不可能,为什么?
答案 0 :(得分:1)
我认为您需要做的是设置查询以获取Holiday条目。我不确定这可以使用映射来完成。
我的原始答案的其他信息,可能不适用:您可以在NHibernate中拥有多对多关系,而无需为连接表条目创建单独的实体类,但基础数据仍然需要存在于数据库中。
答案 1 :(得分:1)
你应该能够使用property-ref来做到这一点,我相信NHibernate 2.1中提供了这个属性。我在link text找到了它,而jira是将它添加到NHibernate中。
我不确定这会在日期列上有效,如果您的日期字段包含时间数据,那么您肯定会运气不好。
您始终可以将关系保留在模型之外,并通过存储库方法(即GetHolidaysForDate)访问集合。这对我来说更有意义,因为假期与日历条目和特定文化不同。除非你使用的非美国意义相当于“度假”。
答案 2 :(得分:0)
您可以创建一个数据库视图(或派生表查询),其中包含来自CalendarEntry
和Holiday
的相应ID,然后使用该视图映射多对多关系 - 这在技术上避免了连接表,同时允许NHibernate以它想要的方式工作。
你需要确保NHibernate不会尝试更新集合(可能是inverse="true"
和cascade="none"
的某种组合)并避免在代码中修改它们 - 我认为你没事有了这个,你根本不需要一张桌子。