没有外键的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 属性作为外键映射到其他实体