免责声明:我对NHibernate / Fluent NHibernate很陌生。
我有一张事件表:
ID UniqueIdentifier,
Name varchar(100),
Details varchar(MAX)
....
我还有一个显示事件位置的查找表:
ID UniqueIdentifier,
StartDate datetime,
EndDate datetime,
City varchar(100)
....
我想要做的是在返回我的事件列表时从我的位置表返回MIN(StartDate)和MAX(EndDate)值。
现在,传统上,我会为我的事件表构建一个View in SQL,返回这些聚合值。根据我的理解,如果我在使用NHibernate时这样做,我需要创建两个Fluent地图,一个用于查看(引用我的SQL视图),另一个用于插入/编辑,引用我的表。
我说错了吗?
我想的另一个选择是在我的Fluent映射中,我可以以某种方式对相关位置表执行聚合MIN和MAX函数。
哪种方法首选,我将如何完成任务?
谢谢 - 乔尔
答案 0 :(得分:2)
如果最小值和最大值适用于特定事件,您可以将其映射为:
Map(x => x.MaxDate).Formula("(SELECT MAX(EndDate) FROM locations l WHERE l.ID = ID)");
Map(x => x.MinDate).Formula("(SELECT MIN(StartDate) FROM locations l WHERE l.ID = ID)");
注意:这些属性是只读的(永不回写)
如果它应该是全球使用期货(3个查询作为一次往返发布)
var mindate = session.QueryOver().FutureValue();
var maxdate = session.QueryOver().FutureValue();
var events = session.QueryOver().Future();