1

在我的对象图中, VendorServiceRateChange 有一个延迟加载的属性IList<VendorService>VendorServiceList ,而 VendorService 有一个延迟加载的属性IList<ClientService>

当我运行以下代码时,我在 VendorServiceList 和 ClientServiceList 之间得到一个笛卡尔积。

queueList = session
    .CreateCriteria<VendorRateChange>()
    .Add(Restrictions.IsNull("ProcessedDate"))
    .Add(Restrictions.Le("EffectiveDate", DateTime.Now))
    .SetFetchMode("VendorServiceList", FetchMode.Join)
    .SetFetchMode("VendorServiceList.Vendor", FetchMode.Join)
    .SetFetchMode("VendorServiceList.CityService", FetchMode.Join)
    .SetFetchMode("VendorServiceList.ClientServices", FetchMode.Join)
    .SetResultTransformer(new DistinctRootEntityResultTransformer())
    .AddOrder(new Order("Audit.CreatedDate", true))
    .List<VendorRateChange>();

有没有办法使用 Criteria 或 DetachedCriteria 来构造这个查询,这不会导致笛卡尔积作为我的 VendorServiceList?我不想诉诸于注释掉“VendorServiceList.ClientServices”上的获取并在初始查询返回后使用 Initialize 调用循环。

提前致谢。

4

2 回答 2

3

您确定它是笛卡尔积,或者您只是在重新调整的列表中收到“重复”行?如果是这样,.List()请尝试调用 before ,.SetResultTransformer(Transformers.DistinctRootEntity)因为通过急切地获取关联的集合,您会收到一个包含同一实体重复项的列表。

于 2011-09-19T19:53:47.680 回答
1

在开始创建笛卡尔积之前,您可以拥有一个 FetchMode.Join。如果您将其他人切换到 FetchMode.Select 或其他方式怎么办?

于 2011-09-19T20:14:30.023 回答