nhibernate - 内连接后防止多个实例

标签 nhibernate queryover

连接到另一个表后,同一对象的多个实例有一个小问题。为了测试,我创建了一个 Store带两个Products (多对多关系)。以下代码段有望描述我的问题。

var preResult = _session.QueryOver<Store>().List(); // One store

Product productAlias = null;
var result = _session.QueryOver<Store>()
    .JoinAlias(s => s.Products, () => productAlias)
    .List();                                        // Two instances of the same store

我什至认为这种行为是正确的,但我怎样才能防止多个实例?是否可以在查询中?

只是为了了解为什么我需要进行这种不必要的连接:我想根据不同的标准扩展查询,类似于:
Product productAlias = null;
var query = _session.QueryOver<Store>().JoinAlias(s => s.Products, () => productAlias);
if (!string.IsNullOrWhiteSpace(criteria.ProductName))
{
    query.Where(Restrictions.On(() => productAlias.Name).IsInsensitiveLike(criteria.ProductName));
}

if (criteria.ProductType != null)
{
    query.Where(s => productAlias.Type == criteria.ProductType);
}

var result = query.List();

在这里,我遇到了不同的问题,具体取决于标准。

最佳答案

尝试使用 Transformers.DistinctRootEntity在您的场景中消除笛卡尔积。

Product productAlias = null;
var query = _session.QueryOver<Store>()
                    .JoinAlias(s => s.Products, () => productAlias)

query = query.TransformUsing(Transformers.DistinctRootEntity);

var result = query.List();

关于nhibernate - 内连接后防止多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076217/

相关文章:

nhibernate - NHibernate HiLo 生成器参数是什么?

c# - NHibernate 的 cfg.xml 文件的单声道验证

c# - 如何使用 nHibernate 和 QueryOver API 获得不同的结果?

NHibernate 投影 (QueryOver.SelectList) 限制

nHibernate:使用 QueryOver 的连接和分离

nhibernate - 如何在nhibernate查询中选择引用的实体

c# - nHibernate,一对零或一对关系困境

c# - 如何使用 fluent nhibernate 创建引用表

hibernate - 在没有 .hbm 或 xml 文件的情况下在 NHibernate Fluent Mapping 中定义命名查询

nhibernate - 查询开始于