没有外键的NHibernate映射集合

时间:2010-07-09 14:39:49

标签: nhibernate nhibernate-mapping

我有一个名为WorkingDays的班级,这个班级需要一组日期,这些日期是银行假日的日期。在我们的数据库中,我们有一个包含这些日期的表 - 我希望nhibernate获取所有这些日期并填充bankHolidays集合。

然而,我没有一个代表数据库中链接的表 - 当所有WorkingDays impls具有完全相同的银行假日日期列表时,似乎没有必要。

那么如何在不需要添加外键的情况下映射呢?我希望下面的代码可以更好地说明:

public class WorkingDays : Interval
{
   public ICollection<DateTime> BankHolidays
   {
       get;
       private set;
   }
}

3 个答案:

答案 0 :(得分:1)

您是否有理由将此作为实体本身的集合?为什么没有单独的存储库/ DAO负责访问此集合?如果数据是相当静态的,那么通过使用二级缓存也可能获得相当多的收益。

答案 1 :(得分:1)

如果您只需要一个只读集合,可以尝试以下方法:

<property name="BankHolidays" type="DateTime[]" formula="(SELECT Date FROM BankHolidays)" update="false" insert="false" />

答案 2 :(得分:0)

我有similar question并认为我将来会帮助其他人。

我认为你不能强迫NHibernate映射那些与数据库中父类没有某种关系的子节点。毕竟它是对象关系映射器

解决方案是暗示通过数据库的关系。创建一个将WorkingDays与BankHolidays链接的视图。然后将HasMany(x =&gt; x.BankHolidays)添加到您的WorkingDays映射中。