没有外键的NHibernate映射集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了没有外键的NHibernate映射集合相关的知识,希望对你有一定的参考价值。

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

但是我没有一个代表数据库中链接的表 - 当所有的工作日推出时,它似乎没有必要具有完全相同的银行假日日期列表。

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

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

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

另一答案

如果您只需要只读集合,则可以尝试以下操作:

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

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

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

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

以上是关于没有外键的NHibernate映射集合的主要内容,如果未能解决你的问题,请参考以下文章

通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体

具有自然键的流畅 NHibernate 引用实体

映射到多个主键的外键列

Fluent NHibernate - 如何将外键列映射为属性

NHibernate 集合映射不是 DRY 吗?

如何在 Fluent NHibernate 中将一对一关系映射为复合键的一部分