我的查询返回了我预期的两倍数量的行。当我查看nHibernate探查器时,我看到了我期望的查询,但它在探查器中出现了两次......
映射:
位置有许多LocationRooms,其中有许多LocationRoomLayouts:
位置
public LocationMap()
{
Id(x => x.locationID).Column("ID");
HasMany(x => x.LocationRooms)
.KeyColumn("LID")
.Not.LazyLoad().Cascade.All();
}
位置房间
public LocationRoomMap ()
{
References(x => x.Location).Column("LID");
HasMany(x => x.LocationRoomLayouts)
.KeyColumn("RID")
.Not.LazyLoad().Cascade.All();
}
位置房间布局
public LocationRoomLayoutMap()
{
References(x => x.LocationRoom).Column("RID");
}
返回两行的查询:
var locations = session.CreateCriteria<LocationRoomLayout>("p")
.Add(Restrictions.Eq("CostPerHour", 0))
.Add(Restrictions.Eq("CostPerDay", 0))
.Add(Restrictions.Eq("CostPerHalfDay", 0))
.Add(Restrictions.Eq("CostPerPerson", 0))
.List<LocationRoomLayout>();
答案 0 :(得分:1)
NHibernate使用从数据库中检索的结果集来构建实体。 由于您的实体由来自不同表的数据组成,因此数据库会从“主”表中多次返回相同的记录。
因此,返回多个实体。 使用DistinctRootEntityTransformer确保NHibernate仅返回不同的实体。
可以找到更多信息here