nHibernate返回记录数的两倍

时间:2014-10-23 10:32:27

标签: c# linq nhibernate

我的查询返回了我预期的两倍数量的行。当我查看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>();

1 个答案:

答案 0 :(得分:1)

NHibernate使用从数据库中检索的结果集来构建实体。 由于您的实体由来自不同表的数据组成,因此数据库会从“主”表中多次返回相同的记录。

因此,返回多个实体。 使用DistinctRootEntityTransformer确保NHibernate仅返回不同的实体。

可以找到更多信息here