我有一个名为WorkingDays的班级,这个班级需要一组日期,这些日期是银行假日的日期。在我们的数据库中,我们有一个包含这些日期的表 - 我希望nhibernate获取所有这些日期并填充bankHolidays集合。
然而,我没有一个代表数据库中链接的表 - 当所有WorkingDays impls具有完全相同的银行假日日期列表时,似乎没有必要。
那么如何在不需要添加外键的情况下映射呢?我希望下面的代码可以更好地说明:
public class WorkingDays : Interval
{
public ICollection<DateTime> BankHolidays
{
get;
private set;
}
}
答案 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映射中。