流畅的NHibernate:哪个更好...从视图中选择或执行连接以从相关表中检索MIN和MAX值?

时间:2011-08-31 14:44:54

标签: nhibernate fluent-nhibernate

免责声明:我对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函数。

哪种方法首选,我将如何完成任务?

谢谢 - 乔尔

1 个答案:

答案 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();