C# nHibernate返回两倍的记录数
我的查询返回的行数是预期的两倍。当我查看nHibernate探查器时,我看到了我期望的查询,但它在探查器中出现了两次 映射: 一个位置有许多LocationRoom,这些LocationRoom具有许多LocationRoom布局: 位置C# nHibernate返回两倍的记录数,c#,linq,nhibernate,C#,Linq,Nhibernate,我的查询返回的行数是预期的两倍。当我查看nHibernate探查器时,我看到了我期望的查询,但它在探查器中出现了两次 映射: 一个位置有许多LocationRoom,这些LocationRoom具有许多LocationRoom布局: 位置 public LocationMap() { Id(x => x.locationID).Column("ID"); HasMany(x => x.LocationRooms) .KeyColumn("LID")
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>();
var locations=session.CreateCriteria(“p”)
.Add(限制条件Eq(“每小时成本”,0))
.Add(限制条件Eq(“每日成本”,0))
.Add(Restrictions.Eq(“CostPerHalfDay”,0))
.Add(限制条件Eq(“CostPerPerson”,0))
.List();
NHibernate使用从数据库检索的结果集来构建实体。
由于实体由来自不同表的数据组成,因此数据库会多次从“主”表返回相同的记录
因此,将返回多个实体。
使用DistincTrotentyTransformer确保NHibernate只返回不同的实体
可以找到更多信息我尝试添加.SetResultTransformer(新的DistinctRootEntityResultTransformer()),得到了完全相同的结果。。。我相信这是一个不同的问题,因为在nHibernateProfiler中生成的SQL是完美的,它只执行了两次